SpringBoot集成Redis用法笔记
今天给大家整理一下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
然后启动redis。
2、引入依赖 pom.xml
org.springframework.boot spring-boot-starter-data-redis
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 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> listOperations=redisTemplate.opsForList(); List list=new ArrayList<>(); list.add("篮球"); list.add("足球"); listOperations.leftPushAll("list:str",list); List 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 aa=listOperations.leftPop("list:str"); System.out.println(listOperations.leftPop("list:str")); } @Test public void redisHashTest() { HashOperations 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 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 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 zsortOperations = redisTemplate.opsForZSet(); //向集合中插入元素,并设置分数 zsortOperations.add("ranking-list", "小明", 80); //向集合中插入多个元素 DefaultTypedTuple tuple1 = new DefaultTypedTuple("小王", 100.0); DefaultTypedTuple tuple2 = new DefaultTypedTuple("小张", 90.0); zsortOperations.add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2))); System.out.println(zsortOperations.range("ranking-list",0,-1)); } }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。