要想通过 Java 操作 redis,首先要连接上 redis 服务器,推荐看通过 Java 操作 redis -- 连接 redis
创建项⽬
勾选 NoSQL 中的 Spring Data Redis
当然, 把 Web 中的 Spring Web 也勾选⼀下.⽅便写接进⾏后续测试.
配置 redis 服务地址
在 application.properties 配置文件中配置参数:
#redis 服务器的地址
spring.redis.host=127.0.0.1
#redis 服务器的端口号
spring.redis.port=8888
至于为什么是这里配置的 redis 端口是本地的 8888 端口,相信看了本文章头部推荐的博客以后就很清楚了,我们用 shh 的端口转发,将服务器上 redis 的 6379 端口映射到了本地的 8888 端口
测试代码
package com.example.redisspringdemo.Controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Set;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2024-05-21* Time: 18:03*/
@RestController
@RequestMapping("/RedisDemoController")
public class RedisDemoController {//从 spring 的 IOC 容器中获取 stringRedisTemplate 对象@Autowired//在 Spring 中通过 StringRedisTemplate 类的对象来操作 Redis// 在 Spring 中操作 Redis 最原始的类是 RedisTemplate,StringRedisTemplate 是它的子类//专门用于处理文本数据,还有一个类专门用于处理二进制数据private StringRedisTemplate stringRedisTemplate;/*** 操作 Redis 中 String 类型的键值对* */@RequestMapping("/stringDemo")public String stringDemo(){// 清空 Redis 中已有的键值对避免对最终结果造成影响// 但 Spring 中并没有封装 flushAll 等操作,那怎么办呢?//RedisTemplate 留了一个后手,能够让我们执行 Jedis 原生命令// 这里的 RedisConnection 就代表了 Redis 连接,对标 Jedis 对象//通过 RedisConnection 对象就可以执行 Jedis 对象中的方法stringRedisTemplate.execute((RedisConnection redisConnection)->{//清空 redis 中的数据redisConnection.flushAll();return null;});//stringRedisTemplate.opsForValue() 得到一个专门操作 String 类型的对象//调用 set 方法设置键值对stringRedisTemplate.opsForValue().set("key1","111");stringRedisTemplate.opsForValue().set("key2","222");stringRedisTemplate.opsForValue().set("key3","333");//通过 get 方法通过 key 获取 valueString key1=stringRedisTemplate.opsForValue().get("key1");String key2=stringRedisTemplate.opsForValue().get("key2");System.out.println("key1:"+key1);System.out.println("key2:"+key2);return "ok";}/*** 操作 Redis 中 List 类型的键值对* */@RequestMapping("/listDemo")public String listDemo(){stringRedisTemplate.execute((RedisConnection redisConnection)->{//清空 redis 中的数据redisConnection.flushAll();return null;});// stringRedisTemplate.opsForList() 得到一个专门操作 List 类型的对象// leftPush() 向列表的左边插入数据stringRedisTemplate.opsForList().leftPush("key","1");//leftPushAll()向列表的左边插入多条数据stringRedisTemplate.opsForList().leftPushAll("key","2","3","4");//range() 获取指定范围内的数据List<String> key=stringRedisTemplate.opsForList().range("key",0,-1);System.out.println(key);return "ok";}/*** 操作 Redis 中 set 类型的键值对* */@RequestMapping("/setDemo")public String setDemo(){stringRedisTemplate.execute((RedisConnection redisConnection)->{redisConnection.flushAll();return null;});// stringRedisTemplate.opsForSet() 得到一个专门操作 Set 类型的对象//向集合中添加数据stringRedisTemplate.opsForSet().add("key","zhangsan","lisi","wangwu");//获取集合中的所有数据Set<String> key=stringRedisTemplate.opsForSet().members("key");System.out.println(key);//判断集合中 zhangsan 是否存在Boolean result1=stringRedisTemplate.opsForSet().isMember("key","zhangsan");System.out.println(result1);//获取集合中的元素个数Long count=stringRedisTemplate.opsForSet().size("key");System.out.println(count);stringRedisTemplate.opsForSet().remove("key","zhangsan","lisi");key=stringRedisTemplate.opsForSet().members("key");System.out.println(key);return "ok";}@RequestMapping("/hashDemo")public String hashDemo(){stringRedisTemplate.execute((RedisConnection redisConnection)->{redisConnection.flushAll();return null;});// stringRedisTemplate.opsForHash() 得到一个专门操作 Hash 类型的对象//向哈希表中添加数据stringRedisTemplate.opsForHash().put("key","f1","111");stringRedisTemplate.opsForHash().put("key","f2","222");stringRedisTemplate.opsForHash().put("key","f3","333");//获取 hash 表中的数据String f1=(String) stringRedisTemplate.opsForHash().get("key","f1");System.out.println(f1);//判断哈希表中的某个键值对是否存在Boolean exists=stringRedisTemplate.opsForHash().hasKey("key","f1");System.out.println(exists);//删除哈希表中的键值对stringRedisTemplate.opsForHash().delete("key","f1","f2");//获取哈希表中的元素个数Long count=stringRedisTemplate.opsForHash().size("key");System.out.println(count);return "ok";}@RequestMapping("/zsetDemo")public String zsetDemo(){//清空 redis 中的数据stringRedisTemplate.execute((RedisConnection redisConnection)->{redisConnection.flushAll();return null;});// stringRedisTemplate.opsForZSet() 得到一个专门操作 ZSet 类型的对象//添加数据到有序集合中stringRedisTemplate.opsForZSet().add("key","zhangsan",10);stringRedisTemplate.opsForZSet().add("key","lisi",20);stringRedisTemplate.opsForZSet().add("key","wangwu",30);//获取有序集合中指定范围的元素Set<String> members=stringRedisTemplate.opsForZSet().range("key",0,-1);System.out.println(members);//获取有序集合指定范围内的元素和分数Set<ZSetOperations.TypedTuple<String>> membersAndScore=stringRedisTemplate.opsForZSet().rangeWithScores("key",0,-1);System.out.println(membersAndScore);//获取有序集合中指定元素的分数Double score=stringRedisTemplate.opsForZSet().score("key","zhangsan");System.out.println(score);//删除有序集合中指定的元素stringRedisTemplate.opsForZSet().remove("key","zhangsan","lisi");//获取有序集合中的元素个数Long count=stringRedisTemplate.opsForZSet().size("key");System.out.println(count);//获取有序集合中指定元素的排名Long rank=stringRedisTemplate.opsForZSet().rank("key","wangwu");System.out.println(rank);return "ok";}}