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

大家可以在官网下载 :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: localhostdatabase: 0  port: 6379  password:jedis:pool:max-active: 8      max-wait: -1msmax-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)@SpringBootTestpublic class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;/*ValueOperations:简单K - V操作    SetOperations:set类型数据操作    ZSetOperations:zset类型数据操作    HashOperations:针对map类型的数据操作    ListOperations:针对list类型的数据操作*/
@Testpublic 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");
    }@Testpublic 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"));    }@Testpublic 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());    }@Testpublic 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);    }
@Testpublic 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));
    }
}



IT技术分享社区
个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT技术分享社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值