Java使用Redis的详细教程
Redis是一个基于内存的key-value结构数据库,即非关系型数据库,具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中,Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教程:
一、Redis的安装与启动
-
下载与安装:
- 可以从Redis的官方网站或其他可信的下载源获取Redis的安装包。
- 按照安装包的说明进行安装,通常包括解压、编译(如果需要)和配置等步骤。
-
启动Redis服务端:
- 在安装目录下找到
redis-server.exe
文件,并运行它。可以指定配置文件来启动Redis服务,例如:redis-server.exe redis.windows.conf
。
- 在安装目录下找到
-
启动Redis客户端:
- 在安装目录下找到
redis-cli.exe
文件,并运行它。默认情况下,它会连接到本地的Redis服务(即6379端口)。 - 可以使用
keys *
命令来测试Redis服务是否启动正确。
- 在安装目录下找到
二、Java操作Redis的常用客户端
在Java中操作Redis,常用的客户端有Jedis、Lettuce和Spring Data Redis等。以下是这些客户端的简要介绍和使用示例:
-
Jedis:
- Jedis是Redis官方推荐的Java客户端,封装了Redis的底层通信协议,提供了丰富的API来操作Redis。
- 使用示例:
Jedis jedis = new Jedis("localhost", 6379); jedis.set("key", "value"); String value = jedis.get("key"); System.out.println("Value is " + value); jedis.close();
-
Lettuce:
- Lettuce是一个基于Netty的异步非阻塞Redis客户端,提供了高性能的Redis操作。
- 使用示例:
RedisURI redisUri = RedisURI.builder() .withHost("127.0.0.1") .withPort(6379) .withPassword("yourpassword") .withTimeout(Duration.of(10, ChronoUnit.SECONDS)) .build(); RedisClient redisClient = RedisClient.create(redisUri); StatefulRedisConnection<String, String> connection = redisClient.connect(); RedisCommands<String, String> commands = connection.sync(); commands.set("username", "xmr"); String value = commands.get("username"); System.out.println("Value is " + value); connection.close(); redisClient.shutdown();
-
Spring Data Redis:
- Spring Data Redis是Spring框架提供的一个对Redis的抽象层,简化了Redis的操作,并提供了与Spring框架的无缝集成。
- 使用示例(在Spring Boot项目中):
- 在
pom.xml
文件中添加Spring Data Redis的依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 在
application.properties
或application.yml
文件中配置Redis的连接信息:spring.redis.host=localhost spring.redis.port=6379 spring.redis.password=yourpassword
- 编写配置类,创建
RedisTemplate
对象:@Configuration public class RedisConfiguration { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } }
- 在业务代码中使用
RedisTemplate
来操作Redis:@Autowired private RedisTemplate<String, Object> redisTemplate; public void setValue(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object getValue(String key) { return redisTemplate.opsForValue().get(key); }
- 在
三、Redis常用数据类型与命令
Redis支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等。以下是这些数据类型的常用命令:
-
字符串(String):
SET key value
:设置指定key的值。GET key
:获取指定key的值。SETEX key seconds value
:设置指定key的值,并将key的过期时间设为seconds秒。SETNX key value
:只有在key不存在时设置key的值。
-
哈希(Hash):
HSET key field value
:将哈希表key中的字段field的值设为value。HGET key field
:获取存储在哈希表中指定字段的值。HDEL key field
:删除存储在哈希表中的指定字段。HKEYS key
:获取哈希表中所有字段。HVALS key
:获取哈希表中所有值。
-
列表(List):
LPUSH key value1 [value2]
:将一个或多个值插入列表头部(左侧)。LRANGE key start stop
:获取列表指定范围内的元素。RPOP key
:移除并获取列表最后一个元素。LLEN key
:获取列表长度。
-
集合(Set):
SADD key member1 [member2]
:向集合添加一个或多个成员。SMEMBERS key
:返回集合中的所有成员。SCARD key
:获取集合的成员数。SINTER key1 [key2]
:返回给定所有集合的交集。SUNION key1 [key2]
:返回所有给定集合的并集。SREM key member1 [member2]
:删除集合中的一个或多个成员。
-
有序集合(Sorted Set):
ZADD key score1 member1 [score2 member2]
:向有序集合添加一个或多个成员。ZRANGE key start stop [WITHSCORES]
:通过索引区间返回有序集合中指定区间内的成员。ZINCRBY key increment member
:有序集合中对指定成员的分数加上增量increment。ZREM key member [member...]
:移除有序集合中的一个或多个成员。
四、高级特性
-
持久化:
- RDB(Redis Database Backup):将Redis数据库的状态以快照的形式保存到磁盘上。
- AOF(Append Only File):将Redis执行的所有写命令记录到一个追加日志文件中。
-
主从复制:
- 将一个Redis服务器设置为主服务器,其他Redis服务器设置为从服务器。从服务器会定期向主服务器发送同步请求,主服务器将数据同步到从服务器。
-
Sentinel:
- Redis Sentinel是Redis的高可用解决方案之一。它可以监控Redis主从服务器的状态,当主服务器出现故障时,自动将从服务器提升为主服务器,实现故障自动切换。
通过以上教程,您可以在Java项目中顺利地使用Redis来存储和操作数据。同时,Redis的丰富特性和高级功能也将为您的项目带来更多的便利和性能提升。
相关文章:
Java使用Redis的详细教程
Redis是一个基于内存的key-value结构数据库,即非关系型数据库,具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中,Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教…...

严重 Zimbra RCE 漏洞遭大规模利用(CVE-2024-45519)
攻击者正在积极利用 CVE-2024-45519,这是一个严重的 Zimbra 漏洞,该漏洞允许他们在易受攻击的安装上执行任意命令。 Proofpoint 的威胁研究人员表示,攻击始于 9 月 28 日,几周前,Zimbra 开发人员发布了针对 CVE-2024-…...
php函数积累
对称函数 isset 判断数组arr中是否存在键key 返回值true/false isset(name,$arr) unset 删除数组中的键 需存在key不然抛出异常 unset($arr[name]) json_encode 数据转json格式 json_encode($arr) 一般形式 指定字符编码形式 json_decode json格式转原有数据格式 json_d…...
前端项目场景相关的面试题,包含验证码、图片存储、登录鉴权、动态路由、组件划分等项目场景实际的面试题
项目场景面试题 如何防止短信验证码被刷 问题场景 添加倒计时和图片滑动验证,避免不必要的资源浪费 发送短信验证码需要费用发送短信消耗服务器资源 公司的图片、视频、文件资源如何存储的 传统模式 分开存储到数据服务器,托管服务器到云端 缺点&…...

uniapp 上了原生的 echarts 图表插件了 兼容性还行
插件地址:echarts - DCloud 插件市场 兼容性这块儿不知道后期会不会支持其他浏览器 H5 的话建议可以用原生的不用这个插件...

共享单车轨迹数据分析:以厦门市共享单车数据为例(八)
副标题:基于POI数据的站点综合评价——以厦门市为例(三) 什么是优劣解距离法(TOPSIS)? 优劣解距离法(Technique for Order Preference by Similarity to Ideal Solution,简称TOPSI…...

sentinel原理源码分析系列(二)-动态规则和transport
本文是sentinel原理源码分析系列第二篇,分析两个组件,动态配置和transport 动态规则 Sentinel提供动态规则机制,依赖配置中心,如nacos,zookeeper,组件支持动态配置,模板类型为规则,支…...

ubuntu切换源方式记录(清华源、中科大源、阿里源)
文章目录 前言一、中科大源二、清华源三、阿里源 前言 记录ubunut切换各个源的方式。 备注:更换源之后使用sudo apt-get update更新索引。 提示:以下是本篇文章正文内容,下面案例可供参考 一、中科大源 地址:https://mirrors.u…...

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充
序言: 本文详细讲解了关于ArkTs语言中的泛型,其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法,补充了一部分接口相关的知识,包括接口的继承和具体实现,也写到了一些边边角角的小知识,剩…...
2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析
本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制…...

基于多维统计分析与GMM聚类的食品营养特征研究
1.项目背景 在当今社会,随着人们对健康和营养的日益关注,深入了解食品的营养成分及其对人体的影响变得越来越重要,本研究采用了多维度的分析方法,包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型(GMM&am…...
SkyWalking 告警功能
SkyWalking 告警功能是在 6.x 版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。 告警规则 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。Webhook(网络钩子):定义当警告触发时,哪些服务终端需要被告知。常用告警规则 …...

国内旅游:现状与未来趋势分析
在当今社会快速发展的背景下,国内旅游更是呈现出蓬勃的发展态势。中国,这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地,为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力,深入剖…...

西电25考研 VS 24考研专业课大纲变动汇总
01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合,这是因为工科要求都必须是8开头的专业课,里面参考课本还是没变的,无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…...

【Linux】进程管理:状态与优先级调度的深度分析
✨ 山海自有归期,风雨自有相逢 🌏 📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 …...
同轴电缆笔记
同轴电缆笔记 射频同轴电缆的阻抗标准为什么是50Ω或75Ω呢? 在PCB设计中,在合理的范围内,传输线阻抗的具体数值并不重要。只要控制好整条传输线的阻抗,不要出现阻抗不连续的情况就好了。设计中的其他因素往往决定了我们用什么样…...

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL74
异步复位同步释放 描述 题目描述: 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图: clk为时钟 rst_n为低电平复位 d信号输入 dout信号输出 波形示意图: 输入描…...

在Linux系统安装Nginx
注意:Nginx端口号是80(云服务器要放行) 我的是基于yum源安装 安装yum源(下面这4步就好了) YUM源 1、将源文件备份 cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/ 2、下载阿里源文件 curl -o /etc/yum.repos.d/CentOS-Base.repo ht…...

C初阶(六)--- static 来喽
前言:C语言中有许多关键字(关键字是预先保留的标识符,具有特殊意义,不能用作变量 名、函数名等普通标识符。) 比如:前面在变量与常量那一节提到的extern 就是一个关键字,应该还记得e…...

Git版本控制工具--关于命令
Git版本控制工具 学习前言 在项目开发中,总是需要多个人同时对一个项目进行修改,如何高效快速地进行修改,且控制各自修改的版本不会和他人的进行重叠,这就需要用到Git分布式版本控制器了 作用 解决了一致性,并发性…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...
【Redis】Redis从入门到实战:全面指南
Redis从入门到实战:全面指南 一、Redis简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,它可以用作数据库、缓存和消息代理。由Salvatore Sanfilippo于2009年开发,因其高性能、丰富的数据结构和广泛的语言支持而广受欢迎。 Redis核心特点:…...

LINUX编译vlc
下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...
JS的传统写法 vs 简写形式
一、条件判断与逻辑操作 三元运算符简化条件判断 // 传统写法 let result; if (someCondition) {result yes; } else {result no; }// 简写方式 const result someCondition ? yes : no;短路求值 // 传统写法 if (condition) {doSomething(); }// 简写方式 condition &…...

《架构即未来》笔记
思维导图 第一部分:可扩展性组织的人员配置 第二部分:构建可扩展的过程 第三部分:可扩展的架构方案 第四部分:其他的问题和挑战 资料 问软件工程研究所: https://www.sei.cmu.edu/ AKF公司博客: http://www.akfpart…...