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!

image


1.redisTemplate.boundValueOps("key");// 绑定key操作string

对于操作string常见的业务有:验证码、json数据、pv计数等
基于string原子性操作:setnx,可以实现分布式锁、分布式唯一id

image

2.redisTemplate.boundHashOps("key");// 绑定key操作hash(相当于Java中的Map)

hash在我日常工作中用到场景最多的,比如现在正在进行的商城项目需求:

  1. 需要限制每天每个人的兑换商品数量:
    image
  2. 又或者基于hash去缓存用户信息,pv、uv

3.redisTemplate.boundListOps("key");// 绑定Key操作list

对于操作list,我最常用在当做简易的消息队列使用
image

4.redisTemplate.boundSetOps("key");// 绑定Key操作set

对于操作set,我常常用在控制白名单ip、倒计时抽奖使用
image

5.redisTemplate.boundZSetOps("key");// 绑定Key操作有序set

对于操作zset,它和set相似,但多一个score分值元素
我曾经写过基于zset配合线程通知作为延迟队列的Demo!!(后续我会为它单独出一篇博文!)
image


pipeline管道

在业务系统中,很多业务操作都会涉及操作redis,这个时候我想去批量del、批量set、批量expire
单单使用foreach循环频繁操作redis,每次循环都会发起一次网络连接,量大很耗时!

我们可以考虑使用redis的pipeline实现同一时间频繁操作的业务,pipeline是通过将所有命令进行打包,通过一次网络连接一次性丢给redis处理

image

下面有我执行了五次的结果
image
image
image
image
image

posted @ 2021-12-01 22:56  _running  阅读(180)  评论(0编辑  收藏  举报