Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
??个人主页:奋斗的明志
??所属专栏:Redis
?本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。
Redis Java 集成到 Spring Boot
一、使用 Spring Boot 连接 Redis 单机1.创建Spring Boot 项目2.勾选相关依赖(Dependencies)3.界面显示 二、配置 Redis 服务地址1.在 application.yml 中配置2.映射端口号 三、创建 Controller 类1.创建一个 MyController2.使用 String3.使用 List4.使用 Set5.使用 Hash6.使用 ZSet 四、小结
一、使用 Spring Boot 连接 Redis 单机
1.创建Spring Boot 项目
2.勾选相关依赖(Dependencies)
NoSQL 中的 Spring Data Redis把 Web 中的 Spring Web 也勾选⼀下.方便写接口进行后续测试.3.界面显示
二、配置 Redis 服务地址
1.在 application.yml 中配置
spring: data: redis: host: 127.0.0.1 # 地址 port: 8888 # 映射的端口号
补充:
Spring Boot 1.x 和 Spring Boot 2.x 中,spring.redis.host 用于配置 Redis 连接属性。
Spring Boot 3.x 中,spring.redis.host 已经弃用。
从 Spring Boot 2.x 开始,引入了 spring.data.redis 作为配置 Redis 连接的方式,并且在 Spring Boot 3.x 中也可以使用 spring.data.redis 进行配置。
2.映射端口号
用Shell8 进行配置,需要一个公网ip三、创建 Controller 类
1.创建一个 MyController
由于当前只是写简单的测试代码, 我们就不进⾏分层了. 就只创建个简单的 Controller 即可.
@RestControllerpublic class MyController { @Autowired private StringRedisTemplate redisTemplate;}
StringRedisTemplate 用来处理文本数据的
继承于RedisTemplate
RedisTemplate 可以处理文本数据也可以处理二进制数据
2.使用 String
@GetMapping("/testString")@ResponseBodypublic String testString() { //先清除之前的数据库 redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); //对原生 redis 又做了进一步封装 redisTemplate.opsForValue().set("key", "111"); redisTemplate.opsForValue().set("key2", "222"); redisTemplate.opsForValue().set("key3", "333"); String value = redisTemplate.opsForValue().get("key"); System.out.println("value:" + value); return "OK";}
该代码片段是一个 Spring Boot 控制器方法,通过 RedisTemplate 与 Redis 进行交互,并进行一些基本的操作redisTemplate.execute((RedisConnection connection) -> { ... })
:这行代码调用了 RedisTemplate
的 execute
方法,执行一个 Redis
操作。具体来说,connection.flushAll()
会清空 Redis 中的所有数据(即调用 FLUSHALL
命令)。execute
方法通过 Lambda
表达式传递了一个 Redis
连接对象,用来执行 Redis
命令。执行完 flushAll
后,Redis
中的所有数据
会被删除。redisTemplate.opsForValue()
相当于对命令进行进一步的封装,用它可以调用相关方法。 客户端发送请求(返回OK)表明已经成功 打印日志
3.使用 List
@GetMapping("/testList")@ResponseBodypublic String testList() { //先清除之前的数据库 redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForList().leftPush("key", "111"); redisTemplate.opsForList().leftPush("key", "222"); redisTemplate.opsForList().leftPush("key", "333"); String value = redisTemplate.opsForList().leftPop("key"); System.out.println("value: " + value); value = redisTemplate.opsForList().leftPop("key"); System.out.println("value: " + value); value = redisTemplate.opsForList().leftPop("key"); System.out.println("value: " + value); return "OK";}
客户端发送请求(返回OK)表明已经成功 打印日志
4.使用 Set
@GetMapping("/testSet")@ResponseBodypublic String testSet() { //先清除之前的数据库 redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForSet().add("key", "111", "222", "333"); Set<String> result = redisTemplate.opsForSet().members("key"); System.out.println("result: " + result); Boolean exists = redisTemplate.opsForSet().isMember("key", "111"); System.out.println("existe: " + exists); Long count = redisTemplate.opsForSet().size("key"); System.out.println("count: " + count); redisTemplate.opsForSet().remove("key", "111", "222"); result = redisTemplate.opsForSet().members("key"); System.out.println("result: " + result); return "OK";}
客户端发送请求(返回OK)表明已经成功 打印日志
5.使用 Hash
@GetMapping("/testHash")@ResponseBodypublic String testHash() { //先清除之前的数据库 redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForHash().put("key", "f1", "111"); Map<String, String> map = new HashMap<>(); map.put("f2", "222"); map.put("f3", "333"); redisTemplate.opsForHash().putAll("key", map); String value = (String) redisTemplate.opsForHash().get("key", "f1"); System.out.println("value: " + value); Boolean exists = redisTemplate.opsForHash().hasKey("key", "f1"); System.out.println("exists: " + exists); redisTemplate.opsForHash().delete("key", "f1", "f2"); Long len = redisTemplate.opsForHash().size("key"); System.out.println("len: " + len); return "OK";}
客户端发送请求(返回OK)表明已经成功 打印日志
6.使用 ZSet
@GetMapping("/testZSet")@ResponseBodypublic String testZSet() { //先清除之前的数据库 redisTemplate.execute((RedisConnection connection) -> { connection.flushAll(); return null; }); redisTemplate.opsForZSet().add("key", "zhangsan", 10); redisTemplate.opsForZSet().add("key", "lisi", 20); redisTemplate.opsForZSet().add("key", "wangwu", 30); Set<String> members = redisTemplate.opsForZSet().range("key", 0, -1); System.out.println("members: " + members); Set<ZSetOperations.TypedTuple<String>> membersWithScores = redisTemplate.opsForZSet().rangeWithScores("key", 0, -1); System.out.println("membersWithScores: " + membersWithScores); Double score = redisTemplate.opsForZSet().score("key", "zhangsan"); System.out.println("score: " + score); redisTemplate.opsForZSet().remove("key", "zhangsan"); Long size = redisTemplate.opsForZSet().size("key"); System.out.println("size: " + size); Long rank = redisTemplate.opsForZSet().rank("key", "lisi"); System.out.println("rank: " + rank); return "OK"; }
客户端发送请求(返回OK)表明已经成功 打印日志
四、小结
对于Jedis
来说, 各个方法和 Redis
的命令基本是一致的.而集成到 Spring Boot
之后, 接口上和原始 Redis
命令存在部分差别, 但是使用起来也并不困难, 只要大家熟悉 Redis
的基本操作, 还是很容易可以通过方法名字理解用法的.