SpringBoot集成Redis用法笔记

发布时间:2025-05-15 16:26:38 作者:益华网络 来源:undefined 浏览量(2) 点赞(4)
摘要:今天给大家整理一下SpringBoot集成Redis用法笔记,希望对大家能有所帮助! 一、Redis优点介绍 1、速度快 不需要等待磁盘的IO,在内存之间进行的数据存储和查询,速度非常快。当然,缓存的数据总量不能太大,因为受到物理内存空间大小的限制。 2、支持多种数

今天给大家整理一下SpringBoot集成Redis用法笔记,希望对大家能有所帮助!

一、Redis优点介绍

1、速度快

不需要等待磁盘的IO,在内存之间进行的数据存储和查询,速度非常快。当然,缓存的数据总量不能太大,因为受到物理内存空间大小的限制。

2、支持多种数据库类型

丰富的数据结构 除了string之外,还有list、hash、set、sortedset,一共五种类型。

3、单线程数据库

单线程,避免了线程切换和锁机制的性能消耗。

4、可持久化

支持RDB与AOF两种方式,将内存中的数据写入外部的物理存储设备。

5、支持发布/订阅。

6、支持Lua脚本。

7、支持分布式锁

在分布式系统中,如果不同的节点需要访同到一个资源,往往需要通过互斥机制来防止彼此干扰,并且保证数据的一致性。在这种情况下,需要使用到分布式锁。分布式锁和Java的锁用于实现不同线程之间的同步访问,原理上是类似的。

8、支持原子操作和事务Redis事务是一组命令的集合。

一个事务中的命令要么都执行,要么都不执行。如果命令在运行期间出现错误,不会自动回滚。

9、支持主从复制

支持主-从(Master-Slave)复制与高可用(Redis Sentinel)集群(3.0版本以上)

10、支持管道模式

支持管道Redis管道是指客户端可以将多个命令一次性发送到服务器,然后由服务器一次性返回所有结果。管道技术的优点是:在批量执行命令的应用场景中,可以大大减少网络传输的开销,提高性能。

11、支持多种编程语言

二、示例

1、下载redis

大家可以在官网下载 :https://redis.io/ ,有需要的话也可以留言直接发给大家。

然后启动redis。

2、引入依赖 pom.xml

<!--redis依赖配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 

3、增加配置

redis: host: localhost database: 0   port: 6379   password: jedis: pool: max-active: 8       max-wait: -1ms max-idle: 8       min-idle: 0   timeout: 3000ms

4、示例代码

package my.springboot.redis; import my.springboot.redis.entity.UserDO; import my.springboot.redis.service.IUserInfoService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.*; import org.springframework.test.context.junit4.SpringRunner; import java.util.*; import java.util.concurrent.TimeUnit; /**  * 测试UserInfo用法  **/ @RunWith(SpringRunner.class) @SpringBootTest public class RedisTest { @Autowired private RedisTemplate redisTemplate; /*ValueOperations:简单K - V操作     SetOperations:set类型数据操作     ZSetOperations:zset类型数据操作     HashOperations:针对map类型的数据操作     ListOperations:针对list类型的数据操作*/ @Test public void redisStrTest() {         ValueOperations<String,Object> valueOperations = redisTemplate.opsForValue();         valueOperations.set("name1","小明");         valueOperations.set("name2","小李"); System.out.println("删除前:"+valueOperations.get("name1")); redisTemplate.delete("name1"); //设置name1 60秒 过期         redisTemplate.expire("name1",60, TimeUnit.SECONDS);         System.out.println("删除后:"+valueOperations.get("name1"));         UserDO user= new UserDO();         user.setId(1);         user.setUserName("小明");         user.setPassword("123456");         valueOperations.set("user",user);         UserDO user1=  (UserDO) valueOperations.get("user");     } @Test public void redisListTest() { ListOperations<String,List<String>> listOperations=redisTemplate.opsForList();         List<String> list=new ArrayList<>();         list.add("篮球");         list.add("足球");         listOperations.leftPushAll("list:str",list);         List<String> ll=listOperations.range("list:str",0,-1).get(0); long size= listOperations.size("list:str"); for (String item: ll ) {             System.out.println(item);         } // 移除操作         redisTemplate.delete("list:str");         List<String> aa=listOperations.leftPop("list:str");         System.out.println(listOperations.leftPop("list:str"));     } @Test public void redisHashTest() {         HashOperations<String,Object,UserDO> hashOperations = redisTemplate.opsForHash();         UserDO user= new UserDO();         user.setId(1);         user.setUserName("小明");         user.setPassword("123456");         hashOperations.put("user:hash",user.hashCode()+"",user);         System.out.println(hashOperations.get("user:hash",user.hashCode()+"").getUserName());     } @Test public void redisSettTest() {         SetOperations<String,UserDO> sortOperations = redisTemplate.opsForSet();         UserDO user= new UserDO();         user.setId(1);         user.setUserName("小明");         user.setPassword("123456");         UserDO user1= new UserDO();         user1.setId(2);         user1.setUserName("小张");         user1.setPassword("888888");         sortOperations.add("user:sort",user,user1);         Set<UserDO> result = sortOperations.members("user:sort"); for (UserDO item : result ) {             System.out.println(item.getUserName());         } redisTemplate.delete("user:sort");         System.out.println(result);     } @Test public void redisZSetTest() { redisTemplate.delete("ranking-list");         ZSetOperations<String,String> zsortOperations = redisTemplate.opsForZSet(); //向集合中插入元素,并设置分数         zsortOperations.add("ranking-list", "小明", 80); //向集合中插入多个元素         DefaultTypedTuple<String> tuple1 = new DefaultTypedTuple<String>("小王", 100.0);         DefaultTypedTuple<String> tuple2 = new DefaultTypedTuple<String>("小张", 90.0);         zsortOperations.add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2)));         System.out.println(zsortOperations.range("ranking-list",0,-1));     } }

原文链接:https://programmerblog.xyz

本文转载自微信公众号「IT技术分享社区」,可以通过以下二维码关注。转载本文请联系IT技术分享社区公众号。

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!