zoukankan      html  css  js  c++  java
  • 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


    对您有帮助的话,请点个推荐,转载请注明出处!谢谢各位!!!
  • 相关阅读:
    Socket 端口网络监听
    java android 将小数度数转换为度分秒格式
    android popupwindow 位置显示
    【转】习大大的“黄土情结”:中国要富,农民必须富
    【转】中央农村工作会议首次提出人的新农村
    【转】【CDC翻客】移动端App测试实用指南
    【转】测试,人人都是产品经理之测试产品的选择和创造
    【转】易用性测试
    【转】功能测试的经验总结
    【转】在做性能测试之前需要知道什么
  • 原文地址:https://www.cnblogs.com/runningA/p/15625964.html
Copyright © 2011-2022 走看看