• 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


    对您有帮助的话,请点个推荐,转载请注明出处!谢谢各位!!!
  • 相关阅读:
    MYSQL定时任务 触发器
    mybatis 学习
    SSM 记录
    环境变量配置
    servlet 拦截器 (filter)
    验证码
    jquery $.ajax({});参数详解
    maven打包忽略静态资源解决办法,dispatchServlet拦截静态资源请求的解决办法
    switch..case..
    HDU 1005 题解
  • 原文地址:https://www.cnblogs.com/runningA/p/15625964.html
Copyright © 2020-2023  润新知