SpringBoot集成Redis
一、环境说明
1.CentOS:7
2.Jdk:1.8
3.Redis:5.0.14
5.SpringBoot:2.3.7.RELEASE
二、准备操作环境
1.Docker安装并运行Redis:docker run -d -p 6379:6379 redis:5.0
2.新建SpringBoot项目并增加配置
spring:
redis:
# Redis数据库索引
database: 0
# Redis服务器地址
host: 192.168.56.101
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
## password:
# 连接超时时间(毫秒)
timeout: 1000ms
lettuce:
pool:
# 连接池最大连接数
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: 15ms
# 连接池中的最大空闲连接
max-idle: 15
# 连接池中的最小空闲连接
min-idle: 5
3.增加POM依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
三、show time(simple)
介绍常用api
redisTemplate.opsForValue();// 操作string
redisTemplate.boundValueOps("key");// 绑定key操作string
redisTemplate.opsForHash();// 操作hash(相当于Java中的Map)
redisTemplate.boundHashOps("key");// 绑定key操作hash(相当于Java中的Map)
redisTemplate.opsForList();// 操作list
redisTemplate.boundListOps("key");// 绑定Key操作list
redisTemplate.opsForSet();// 操作set
redisTemplate.boundSetOps("key");// 绑定Key操作set
redisTemplate.opsForZSet();// 操作有序set
redisTemplate.boundZSetOps("key");// 绑定Key操作有序set
有人会疑惑opsForValue和boundValueOps都是一样的操作为啥会有两个?
其实上面说的很明白boundValueOps提供绑定Key!无须“显式”的再次指定key!
1.redisTemplate.boundValueOps("key");// 绑定key操作string
对于操作string常见的业务有:验证码、json数据、pv计数等
基于string原子性操作:setnx,可以实现分布式锁、分布式唯一id
2.redisTemplate.boundHashOps("key");// 绑定key操作hash(相当于Java中的Map)
hash在我日常工作中用到场景最多的,比如现在正在进行的商城项目需求:
- 需要限制每天每个人的兑换商品数量:
- 又或者基于hash去缓存用户信息,pv、uv
3.redisTemplate.boundListOps("key");// 绑定Key操作list
对于操作list,我最常用在当做简易的消息队列使用
4.redisTemplate.boundSetOps("key");// 绑定Key操作set
对于操作set,我常常用在控制白名单ip、倒计时抽奖使用
5.redisTemplate.boundZSetOps("key");// 绑定Key操作有序set
对于操作zset,它和set相似,但多一个score分值元素
我曾经写过基于zset配合线程通知作为延迟队列的Demo!!(后续我会为它单独出一篇博文!)
pipeline管道
在业务系统中,很多业务操作都会涉及操作redis,这个时候我想去批量del、批量set、批量expire
单单使用foreach循环频繁操作redis,每次循环都会发起一次网络连接,量大很耗时!
我们可以考虑使用redis的pipeline实现同一时间频繁操作的业务,pipeline是通过将所有命令进行打包,通过一次网络连接一次性丢给redis处理
下面有我执行了五次的结果
对您有帮助的话,请点个推荐,转载请注明出处!谢谢各位!!!