Redis的客户端很多,官方推荐三种:(Jedis,lettuce,Redission)。spring data redis,在Spring Boot 项目中还提供了对应的Starter,即Spring-boot-starter-data-redis.
Jedis的maven坐标:
| <dependency> |
| <groupld>redis.clients</groupld> |
| <artifactld>jedis</artifactld> |
| <version>2.8.0</version> |
| </dependency> |
使用Jedis操作Redis的步骤:
- 获取连接
- 执行操作
- 关闭连接
| public void testRedis(){ |
| |
| Jedis jedis = new Jedis("localhost",6379); |
| |
| jedis.set("username","xiaoming"); |
| |
| jedis.close(); |
| } |
使用spring Data Redis
| <dependency> |
| <groupld>org.springframework.boot</groupld> |
| <artifactld>spring-boot-starter-data-redis</artifactld> |
| </dependency> |
Spring Data Redis中提供了一个高度封装的类: RedisTemplate,针对edis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
- ValueOperations:简单K-V操作
- SetOperations: set类型数据操作
- ZSetOperations: zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:针对list类型的数据操作
spring中添加配置:
| spring: |
| application: |
| name: springRedis_demo |
| redis: |
| host: localhost |
| port: 6379 |
| password: |
| database: 0 |
| jedis: |
| pool: |
| max-active: 8 |
| max-wait: 1ms |
| max-idle: 4 |
| min-idle: 0 |
- ValueOperations:简单K-V操作 对String类型的操作
| ValueOperations valueOperations = redisTemplate.opsForValue(); |
| |
| valueOperations.set("city","beijing"); |
| |
| String city = (String) valueOperations.get("city"); |
| |
| valueOperations.set("key1","value1",10l, TimeUnit.SECONDS); |
| |
| Boolean aBoolean = valueOperations.setIfAbsent("city", "nanjing"); |
| System.out.println(aBoolean); |
- HashOperations:针对map类型的数据操作
| public void testHash(){ |
| HashOperations hashOperations = redisTemplate.opsForHash(); |
| |
| hashOperations.put("002","name","xiaoming"); |
| hashOperations.put("002","age","20"); |
| hashOperations.put("002","addr","beijing"); |
| |
| String age = (String) hashOperations.get("002", "age"); |
| System.out.println(age); |
| |
| Set keys = hashOperations.keys("002"); |
| for (Object key : keys) { |
| System.out.println(key); |
| } |
| |
| List values = hashOperations.values("002"); |
| for (Object value : values) { |
| System.out.println(value); |
| } |
| } |
- ListOperations:针对list类型的数据操作
| |
| public void TestList(){ |
| ListOperations listOperations = redisTemplate.opsForList(); |
| |
| listOperations.leftPush("mylist","a"); |
| listOperations.leftPushAll("mylist","b","c","d"); |
| |
| |
| List<String> mylist = listOperations.range("mylist", 0, -1); |
| for (String s : mylist) { |
| System.out.println(s); |
| } |
| |
| |
| Long mylist2 = listOperations.size("mylist"); |
| int lSize = mylist2.intValue(); |
| for (int i = 0; i < lSize; i++) { |
| |
| String mylist1 = (String) listOperations.rightPop("mylist"); |
| System.out.println(mylist1); |
| } |
| } |
| |
| @Test |
| public void testSet(){ |
| SetOperations setOperations = redisTemplate.opsForSet(); |
| |
| setOperations.add("mySet","a","b","c","a"); |
| |
| Set<String> mySet = setOperations.members("mySet"); |
| for (String s : mySet) { |
| System.out.println(s); |
| } |
| |
| setOperations.remove("myset","a","b"); |
| |
| mySet = setOperations.members("mySet"); |
| for (String s : mySet) { |
| System.out.println(s); |
| } |
| } |
- ZSetOperations: zset类型数据操作
| |
| @Test |
| public void testZset(){ |
| ZSetOperations zSetOperations = redisTemplate.opsForZSet(); |
| |
| zSetOperations.add("myZSet","a",10.0); |
| zSetOperations.add("myZSet","b",11.0); |
| zSetOperations.add("myZSet","c",12.0); |
| zSetOperations.add("myZSet","a",13.0); |
| |
| Set<String> myZset = zSetOperations.range("myZSet", 0, -1); |
| for (String s : myZset) { |
| System.out.println(s); |
| } |
| |
| zSetOperations.incrementScore("myZSet","b",20); |
| |
| myZset = zSetOperations.range("myZSet", 0, -1); |
| for (String s : myZset) { |
| System.out.println(s); |
| } |
| |
| zSetOperations.remove("myZSet","a","b"); |
| |
| myZset = zSetOperations.range("myZSet", 0, -1); |
| for (String s : myZset) { |
| System.out.println(s); |
| } |
| } |
| |
| @Test |
| public void testZset(){ |
| ZSetOperations zSetOperations = redisTemplate.opsForZSet(); |
| |
| zSetOperations.add("myZSet","a",10.0); |
| zSetOperations.add("myZSet","b",11.0); |
| zSetOperations.add("myZSet","c",12.0); |
| zSetOperations.add("myZSet","a",13.0); |
| |
| Set<String> myZset = zSetOperations.range("myZSet", 0, -1); |
| for (String s : myZset) { |
| System.out.println(s); |
| } |
| |
| zSetOperations.incrementScore("myZSet","b",20); |
| |
| myZset = zSetOperations.range("myZSet", 0, -1); |
| for (String s : myZset) { |
| System.out.println(s); |
| } |
| |
| zSetOperations.remove("myZSet","a","b"); |
| |
| myZset = zSetOperations.range("myZSet", 0, -1); |
| for (String s : myZset) { |
| System.out.println(s); |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类