Reids

标题目录

  • Redis 概述
  • Redis 数据库特点
  • Redis 应用场景
  • Redis 安装
    • Rocky Linux操作系统
    • Windows 操作系统
    • Mac操作系统
  • Redis 服务启动失败解决方案
  • 配置文件详解
  • 常见数据类型
  • 全局命令
  • String类型
    • 字符串
    • 数值
    • 应用场景
  • 列表 List
    • 基本命令
    • 应用场景
  • Hash 散列
    • 特性
    • 基本命令
    • 应用场景
  • Set 类型
    • 基本命令
    • 应用场景
  • Sorted Set 类型
    • 有序集合示例
    • 基本命令
    • 应用场景
  • 数据持久化
    • RDB 数据持久化
      • SAVE 和 BGSAVE
      • 相关策略
      • 特点
    • AOF 数据持久化
      • 开启 AOF 数据持久化
      • AOF数据持久化的策略
      • AOF 文件重写
      • 特点
  • 主从架构
    • 说明
    • 配置
    • 主从复制原理
  • 哨兵 sentinel
    • 哨兵机制说明
    • 哨兵相关配置
    • 实验步骤
    • 哨兵机制的工作原理
  • Java 操作 Redis
    • 使用流程

Redis 概述

Redis 是一个基于内存的非关系型 NoSQL 数据库,用来解决高并发的问题
Reids_第1张图片

Redis 数据库特点

  • 开源的,使用 C 编写,基于内存且支持持久化
  • 高性能的 Key-Value 的 NoSQL 数据库
  • 支持数据类型丰富,字符串string,列表list,哈希散列hash,集合set,有序集合 sorted set
  • 支持多种编程语言(C C++ Python Java PHP … )

Redis 应用场景

  • 短信验证码功能
  • 缓存
  • 共同好友
  • 并发计数
  • 排行榜
  • 增量爬虫
  • 分布式爬虫
  • 消息队列

Redis 安装

Rocky Linux操作系统

  • 安装命令
    • 第1步:更新系统,执行:dnf update -y
    • 第2步:安装Redis,执行:dnf -y install redis
  • Redis服务端操作
    只要修改了 Redis 的配置文件,必须要重新启动 Redis 服务
    • 启动数据库服务:systemctl start redis
    • 停止数据库服务:systemctl stop redis
    • 查看数据库状态:systemctl status redis
    • 重启数据库服务:systemctl restart redis
  • Redis客户端连接
    redis-cli -h IP地址 -p 端口号(6379) -a 密码

Windows 操作系统

  • 下载安装包
    安装包链接
  • 将Redis服务添加到本地服务
    • 第1步:磁盘下创建目录redis文件夹
    • 第2步:进入到Redis文件夹,解压到当前文件夹,之后进入 redis-server.exe 文件所在的目录
    • 第3步:地址栏输入cmd + 回车,进入到cmd命令行
    • 第4步:执行命令
      redis-server --service-install redis.windows.conf --loglevel verbose
      
  • 第5步:右键桌面的 此电脑 - 管理 - 服务 - 找到Redis并双击 - 点击启动,即可启动Redis服务
    Reids_第2张图片
  • 第6步:设置环境变量
    Windows中搜索环境变量,编辑系统环境变量
    Reids_第3张图片
  • 第7步:打开新的cmd命令行终端,输入 redis-cli 命令,即可进入到redis的命令行模式Reids_第4张图片

Mac操作系统

brew install redis

Redis 服务启动失败解决方案

方案1

  • vim /etc/redis.conf
  • 修改配置文件中出错的地方,保存退出
  • systemctl restart redis

方案2

  • mv /etc/redis.conf /etc/redis.conf.error
  • cp -p /etc/redis.conf.bak /etc/redis.conf (复制配置文件备份)
  • systemctl restart redis

配置文件详解

  • 配置文件所在路径
    /etc/redis.conf
    修改配置文件之前首先备份,执行命令:cp -p /etc/redis.conf /etc/redis.conf.bak
  • 设置连接密码
    # 1.配置文件中对应的配置
       requirepass 123456 #其中123456为设置的密码
    # 2.修改完成侯重启Reids服务
       systemctl restart redis
    # 3.客户端连接测试
       redis-cli -h 127.0.0.1 -p 6379 -a 123456
       127.0.0.1:6379>PING
    
  • 设置允许远程连接
    # 1.注释掉配置文件中的本地IP地址绑定
        bind 127.0.0.1
    # 2.关闭保护模式(把yes改为no)
        protected-mode no
    # 3.重启Redis服务
      systemctl restart redis
    

常见数据类型

  • Redis作为一种 key/value 结构的数据存储系统,为了便于对数据进行进行管理,提供了多种数据类型
  • Redis中基础数据结构包含字符串、散列,列表,集合,有序集合

全局命令

适用于所有数据类型

命令 描述
SELECT index 选择所在库(index在0~15之间)
KEYS * 查看所有的KEY
TYPE key 查看KEY数据类型
DEL key 删除KEY
FULSHDB 清空当前库
FLUSHALL 清除所有库数据

String类型

字符串类型是redis中最简单的数据类型,它存储的值可以是字符串,其最大字符串长度支持到512M。基于此类型,可以实现博客的字数统计,实现一个博客的的点赞操作、实现短信验证码的存储、实现网站首页缓存等
(在Redis中,字符串、数值都会以字符串的格式来存储)

字符串

命令 描述
SET key value 按指定的键设置值
GET key 获取键的值
SET key value nx nx表示当key不存在时进行设置
SET key value ex seconds 指定过期时间
MSET key value key value … 同时设置多个键值
MGET key key key … 同时获取多个值
STRLEN key 获取字符串长度

数值

命令 描述
INCRBY key increment 将键的整数值按给定的量递增
DECRBY key increment 将键的整数值按给定的量递减
INCR key 将键的整数值递增1
DECR key 将键的整数值递减1
INCRBYFLOAT key increment 将键的浮点值按给定的量递增

应用场景

  • 应用场景1:短信验证码
    1. 用户:用户输入手机号,点击发送短信验证码按钮,向后端发出请求,将手机号传递给后端
    2. 后端:完成控制器方法处理发短信的业务
    @PostMapping("sendMessage)
    public JsonResult sendMessage(String phone){
        1.接收手机号;
        2.校验手机号的合法性;
        3.生成6位的随机验证码;
        4.调用第三方短信平台接口发送短信;
        5.将手机号和验证码保存到Redis数据库;
          5.1 数据类型选择: 字符串
          5.2 key-value设计: {"sms_13603263409": 123456}
          5.3 Redis命令: SET sms_13603263409 123456 ex 600
        6.返回响应;
    }
    
    1. 用户:手机收到验证码,页面中输入短信验证码,点击登录按钮,再次发送请求到后端[手机号和验证码]
    2. 后端:完成控制器方法处理登录请求
    @PostMapping("login")
    public JsonResult login(String phone, String code){
        1.接收手机号和验证码;
        2.从Redis中获取当时生成的验证码serverCode: GET sms_13603263409
        3.情况1: serverCode为null,返回:验证码已过期,请重新获取;
          情况2: serverCode!=code,返回:验证码有误,请重新输入;
          情况3: serverCode==code,返回:登录成功,删除key-value,释放资源: DEL sms_13603263409;
    }
    
  • 应用场景2:热点数据的缓存
    网页首页为例
    public JsonResult weiboIndex(){
        //1.从Redis中获取首页数据
            redis_data: GET weibo_index
        //2.如果Redis中无数据,则到MySQL中查询;
            List weiboIndexVOS = weiboMapper.selectIndex()
            //3.缓存到Redis中
            SET weibo_index '[{第一条微博信息},{},{},...]' ex 30
            //4.返回响应
            return JsonResult.ok(weiboIndexVOS);
        //2.如果Redis中存在数据,则直接返回响应
        return JsonResult.ok(redis_data);
    }
    
  • 应用场景3:并发计数,比如点赞数、评论数等

列表 List

Redis 的 list 类型相当于 java 中的 LinkedList ,其原理就就是一个双向链表。支持正向、反向查找和遍历等操作,插入删除速度比较快,元素允许重复,经常用于实现队列,栈等结构

基本命令

命令 描述 说明
LPUSH key value1 [value2] 在列表头部压入一个或多个元素
RPUSH key value1 [value2] 在列表尾部压入一个或多个元素
LPOP key 删除并获取列表中的第一个元素
RPOP key 删除并获取列表中最后一个元素
BLPOP key timeout 删除并获取列表中的第一个元素,或者阻塞直到一个可用 timeout如果为3,表示最多阻塞3秒;timeout如果为0,表示永久阻塞,直到有元素可以弹出
BRPOP key timeout 删除并获取列表中最后一个元素,或者阻塞直到一个可用 timeout如果为3,表示最多阻塞3秒;timeout如果为0,表示永久阻塞,直到有元素可以弹出
LLEN key 获取列表的长度
LRANGE key start stop 从列表中获取一系列元素
LINSERT key BEFORE | AFTER pivot value 在列表中的另一个元素之前或之后插入一个元素
LSET key index value 通过索引设置列表中元素的值
LREM key count value 从列表中删除元素 count>0表示从头部开始向表尾搜索,移除与value相等的元素,数量为count;count<0表示从尾部开始向表头搜索,移除与value相等的元素,数量为count;count=0表示移除表中所有与value相等的值
LTRIM key start stop 将列表修剪到指定范围

应用场景

工程中做任务队列,生产者将任务推送到Redis的列表中,由Redis的列表维护整个任务队列,将任务发送给消费者去执行,比如:并发发短信任务、并发发邮件任务

Redis的列表可以做任务队列,但是企业工程中还有其他的专门做任务队列的框架,比如RabbitMQ等

  • 队列模型:先进先出(FIFO),通过LPUSH+BRPOP组合或者RPUSH+BLPOP组合实现队列模型
  • 堆栈模型:后进先出(LIFO),通过LPUSH+BLPOP组合或者RPUSH+BRPOP组合实现堆栈模型
@PostMapping("reg")
public JsonResult reg(@RequestBody UserRegParam userRegParam){
    1.接收数据;
    2.校验合法性;
    3.校验用户名是否被占用;
    4.在数据表中插入数据;
    5.给该用户的邮箱发送一封激活邮件;[需要2秒钟]
    6.返回响应;
}

Reids_第5张图片

Hash 散列

Redis 散列类型相当于 Java 中的 HashMap,实现原理跟 HashMap 一致,一般用于存储对象信息,存储了字段(field)和字段值的映射,一个散列类型可以包含最多2^32-1个字段

特性

  • 优点
    节约内存资源,因为每创建一个键,Redis 都会为这个键储存很多附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等),键越多,redis数据库在储存附件管理信息方面耗费内存越多,花在管理数据库键上的 CPU 和内存也会越多。
  • 缺点
    无法对散列的字段设置过期时间,因为键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作

基本命令

命令 描述
HSET key field value 设置哈希字段的字符串值
HSETNX key field value 尽在哈希字段不存在时设置该字段的值
HMSET key field1 value1 [field2 value2] 将多个哈希字段设置为多个值
HLEN key 获取哈希中的字段数
HGET key field 获取存储在指定键处的hash字段的值
HGETALL key 获取按指定键存储在hash中的所有字段和值
HKEYS key 获取hash中的所有字段
HVALS key 获取hash中的所有值
HMGET key field1 [field2] 获取所有给定哈希字段的值
HDEL key field1 [field2] 删除一个或者多个hash字段
HINCRBY key field increment 将hash字段的整数值按给定的量递增
HINCRBYFLOAT key field increment 将hash字段的浮点值按给定的量递增

应用场景

存储对象类型的数据,存储购物车数据、用户信息各个维度数据统计等

Set 类型

  • Redis 的 Set 类似 Java 中的 HashSet,是 string 类型的无序集合
  • 集合成员是唯一的,这就意味着集合中不能出现重复的数据

基本命令

命令 描述
SADD key member1 [member2] 将一个或多个成员添加到集合中
SMEMBERS key 获取集合中的所有成员
SCARD key 获取集合中的成员数
SISMEMBER key member 确定给定值是否为集合的成员
SRANDMEMBER key count 从集合中获取一个或多个随机成员
SINTER key1 key2 获取多个集合的交集
SINTERSTORE destination key1 key2 获取多个集合的交集并将结果存储到目标集合中
SDIFF key1 key2 获取多个集合的差集
SDIFFSTORE destination key1 key2 获取多个集合的差集并将结果存储到目标集合中
SUNION key1 key2 获取多个集合的并集【自动去重】
SUNIONSTORE destination key1 key2 获取多个集合的并集并将结果存储到目标集合中

应用场景

  • 共同关注、共同好友[利用SINTERSTORE]
  • 增量爬虫[利用SADD的返回值]
    Reids_第6张图片
  • user001: {“peiqi”, “qiaozhi”, “danni”}
  • user002: {“peiqi”, “qiaozhi”, “suxi”}
  • 共同好友:
    SINTERSTORE public_friends user001 user002
    SMEMBERS public_friends
  • 共同好友的数量
    SCARD public_friends

Sorted Set 类型

  • Redis 的 Sorted Set(有序集合)Zset 是一种非常强大的数据结构,它结合了 Set(集合)的唯一性特点和列表的排序功能
  • Sorted Set 允许存储一系列成员(member),每个成员都关联了一个分数(score),这个分数决定了成员在集合中的顺序
  • Sorted Set 的成员是唯一的,但是分数可以重复,经常应用于热门文章的排行,用户积分系统等
  • 也被称为 Zset

有序集合示例

  • 一个保存了水果价格的有序集合
分值 2 4 6 8 10
成员 西瓜 葡萄 芒果 香蕉 苹果
  • 一个保存了员工薪水的有序集合
分值 6000 8000 10000 12000
成员 lucy tom jim jack

基本命令

命令 描述
ZADD key score1 member1 [score2 member2] 将一个或多个成员添加到有序集合中
ZCARD key 获取有序集合中的成员数
ZRANGE key start stop [WITHSCORES] 按索引返回有序集合中的成员范围
ZREM key member [member …] 从有序集合中删除一个或多个成员
ZRANK key member 确定有序集合中成员索引[升序]
ZREVRANK key member 确定有序集合中成员索引[降序]
ZINCRBY key increment member 增加有序集合中成员的分数
ZUNIONSTORE destination numkeys key [key …] [weights 权重值] [AGGREGATE SUM|MIN|MAX] 获取多个有序集合的并集
ZINTERSTORE destination numkeys key [key …] [weights 权重值] [AGGREGATE SUM|MIN|MAX] 获取多个有序集合的交集

应用场景

各种排行榜[文章点击率排行榜,积分系统排行榜,音乐播放次数排行榜]

数据持久化

  • Redis数据库是基于内存的,为了保证数据安全,所以需要将数据持久化到磁盘,以保证 Redis 掉电或者出现故障时,能够将磁盘中的数据恢复到内存中
  • Redis提供了2种数据持久化的方式:RDB 数据持久化和 AOF 数据持久化

RDB 数据持久化

  • RDB 数据持久化是通过手动执行 SAVE 命令、BGSAVE 命令或者在配置文件中配置策略自动触发 BGSAVE 指令执行数据的完整备份
  • RDB 数据持久化是 redis 的默认数据持久化方式,Redis 启动时会自动开启这种方式的持久化机制

SAVE 和 BGSAVE

这两条命令都是让 Redis 立即执行数据的全量备份,将数据备份到 /var/lib/redis/dump.rdb 文件中

  • SAVE命令:同步阻塞,数据备份过程中Redis无法处理客户端的其他请求【执行Redis命令】
  • BGSAVE命令:异步非阻塞,Redis会创建一个子进程执行数据备份,主进程依然可以处理客户端的其他请求【执行Redis命令】

总结:这两条命令不需要开发者手动执行,满足配置文件中的配置策略后,会自动触发 BGSAVE 执行全量备份

相关策略

save 60 10000 # 这里表示每隔60s,如果有超过10000个key发生了变更,那么就进行一次全量备份
save 300 10
save 900 1

特点

  • 全量备份,每次备份所有数据,比较消耗资源
  • 可能会丢失数据,并且丢失数据的数量不确定
  • 备份的 dump.rdb 文件以二进制数据存储,所占空间资源很少
  • 数据恢复速度快

AOF 数据持久化

AOF 数据持久化备份的是 Redis 的命令,通过在 appendonly.aof 文件中追加命令的方式实现备份,默认是关闭的,需要在配置文件中进行开启

开启 AOF 数据持久化

配置文件:/etc/redis.conf

# 是否开启AOF,默认关闭,yes表示开启
appendonly yes

AOF数据持久化的策略

# 1.每次收到写命令就立即强制写入磁盘,是最安全的。
appendfsync always
# 2.每秒钟强制写入磁盘一次,在性能和持久化方面做平衡,推荐该方式
appendfsync everysec
# 3.完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不推荐
appendfsync no

AOF 文件重写

  • 随着命令不断写入AOF文件,该文件会越来越大导致占用空间变大,数据恢复时间变长
  • 为了解决这个问题,Redis 引入了重写机制来对 AOF 文件中的写命令进行合并,进一步压缩文件体积
# 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-percentage 100
# 当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Redis时由于文件尺寸较小导致频繁的重写。
auto-aof-rewrite-min-size 64mb

特点

  • 增量备份,每次只备份执行的写命令
  • 比 RDB 更加可靠,通过设置不同的策略可以保证不丢失任何数据或者最多丢失一秒钟的数据
  • 通过 AOF 重写的配置可以重写备份文件,确保 AOF 日志文件不会过大
  • 数据恢复速度比 RDB 方式要慢

主从架构

说明

因为单个Redis支持的读写能力有限,所以可以使用多个redis来提高并发处理能力;通常搭建主从 (Master/Slave) 架构实现,在主从架构中

  • 主节点(Master)负责读写,并将数据同步到从节点;
  • 从节点(Slave)主要负责读操作;

配置

在从服务器的配置文件中添加如下配置:

replicaof 主服务器的ip地址  主服务器的端口号
# 注意:如果主服务器[master]没有密码则不填写此项配置
masterauth 主服务器的密码

主从复制原理

  1. 当 slave 节点启动成功后会向 master 节点发送数据同步的请求
  2. master 接收到请求后会执行 bgsave 指令生成 rdb 文件,并将 rd b文件同步给 slave
  3. Master 主线程接收接收客户端发送过来的新请求,客户端发送的新指令会暂时存储在内存中。 rdb 文件生成并传输到 slave 后,会将这些新指令也发送给 slave
  4. 对于 Slave 端收到 master 传递过来的 rdb 文件后,会先清空自己内存数据,然后将新的 rdb 文件读到内存,后续也会执行 master 同步过来新的指令

哨兵 sentinel

哨兵机制说明

哨兵 sentinel 是在 Redis 主从架构的模式下,实现高可用性的一种机制,可以监视主服务器和其下的所有从服务器,当主服务器下线时自动进行故障转移

哨兵相关配置

创建哨兵配置文件,比如:/etc/sentinel.conf

# 配置1:哨兵服务端口
port 26379

# 配置2:sentinel monitor    
# master-redis-name 主节点名称,可以自定义。客户端访问时会用到
# master-redis-ip 主节点IP
# master-redis-port 主节点端口
# quorum 故障切换投票数(整数值),下面配置,表示如果有1个sentinel认同切换主节点,就执行切换
sentinel monitor name 127.0.0.1 6379 1

# 配置3:主节点登录密码,如果主节点无密码此项配置不写
sentinel auth-pass name 123456

实验步骤

  • 第1步:停止原有6379的Redis服务

    systemctl stop redis
    
  • 第2步:创建主节点(master)的配置文件,名字为redis-6379.conf

    cp  -p  /etc/redis.conf  /etc/redis-6379.conf
    
  • 第3步:创建6379 6380 6381的数据目录

    mkdir data
    cd data/
    mkdir 6379 6380 6381
    
  • 第4步:修改 redis-6379.conf 文件内容,具体内容如下:

    # 配置1:默认端口6379
    port 6379
    # 配置2: pidfile
    pidfile /var/run/redis_6379.pid
    # 配置3: 设置数据目录 (这个目录需要我们手动自己创建)
    dir /var/lib/redis/data/6379
    # 配置4:日志文件
    logfile '/var/log/redis/redis-6379.log'
    # 配置5:设置redis的登录密码
    requirepass 123456
    # 配置6:主节点认证
    masterauth 123456
    
  • 第5步:创建从节点 redis-6380.conf 配置文件,其修改的内容如下
    cp -p /etc/redis-6379.conf /etc/redis-6380.conf

    # 配置1:默认端口
    port 6380
    # 配置2: pidfile
    pidfile /var/run/redis_6380.pid
    # 配置3: 设置数据目录(这个目录需要我们手动自己创建)
    dir /var/lib/redis/data/6380
    # 配置4:日志文件
    logfile '/var/log/redis/redis-6380.log'
    # 配置5:设置redis的登录密码
    requirepass 123456
    # 配置6:主节点认证
    masterauth 123456
    # 配置7:设置要连接的master的ip和端口
    replicaof 127.0.0.1 6379
    
  • 第6步:创建从节点redis-6381.conf配置文件,其修改的内容如下
    cp -p /etc/redis-6380.conf /etc/redis-6381.conf

    # 配置1:默认端口
    port 6381
    # 配置2: pidfile
    pidfile /var/run/redis_6381.pid
    # 配置3: 设置数据目录(这个目录需要我们手动自己创建)
    dir /var/lib/redis/data/6381
    # 配置4:日志文件
    logfile '/var/log/redis/redis-6381.log'
    # 配置5:设置redis的登录密码
    requirepass 123456
    # 配置6:主节点认证
    masterauth 123456
    # 配置7:设置要连接的master的ip和端口
    replicaof 127.0.0.1 6379
    
  • 第7步:启动主从节点服务(可以打开多个窗口,在不同窗口启动不同服务)

    • 终端1:redis-server /etc/redis-6379.conf
    • 终端2:redis-server /etc/redis-6380.conf
    • 终端3:redis-server /etc/redis-6379.conf
  • 第8步:登录主节点,并检查主从架构状态

    redis-cli  -p  6379
    127.0.0.1:6379>auth 123456
    127.0.0.1:6379>info replication
    
  • 第9步:主节点写入数据,从节点会同步数据
    主节点写入数据,从节点查看数据确认

    redis-cli  -p  6379
    127.0.0.1:6379>set k1 100
    
  • 第10步:停止原来的哨兵服务

    systemctl stop redis-sentinel
    
  • 第11步:在用/etc/目录下创建哨兵配置文件:sentinel.conf,添加内容如下:

    # 哨兵服务端口
    port 26379
    # sentinel monitor    
    # master-redis-name 主节点名称,可以自定义。客户端访问时会用到
    # master-redis-ip 主节点IP
    # master-redis-port 主节点端口
    # quorum 故障切换投票数(整数值),下面配置,表示如果有1个sentinel认同切换主节点,就执行切换
    sentinel monitor name 127.0.0.1 6379 1 
    # 主节点登录密码
    sentinel auth-pass name 123456
    
  • 第12步:启动哨兵Sentinel,检查主从架构
    redis-sentinel sentinel.conf

  • 第13步:kill主节点6379进程

    ps -aux | grep redis
    kill -9 进程号
    
  • 第14步:检查主节点宕机后 sentinel 是否选择了新的主节点,查看终端日志

  • 第15步:重新启动 6379 的服务,检查哨兵是否将其设置为新的从,查看终端日志

哨兵机制的工作原理

  • Redis中的哨兵起到了一个定时监控的功能,每隔1秒会向数据节点发送心跳,检测网络和节点状态
  • 假如在响应时间超过了哨兵配置的down-after-milliseconds值(默认30秒),则sentinel节点会认为该节点下线了。此时,Sentinel节点之间会有一个领导的选举工作,它们会从中选择一个Sentinel节点作为领导者进行故障转移工作
  • 从slave节点中选举一个节点作为新的主节点(Master),sentinel会向其它从节点发送命令,让他们成为新的主节点的从节点,sentinel会将原有主节点更新为从节点,假如故障恢复了,让此节点连接新的主节点

Java 操作 Redis

使用流程

  1. 添加依赖,刷新Maven
    Redis + Jackson
    
    
        org.springframework.boot
        spring-boot-starter-data-redis
    
    
    
    
        com.fasterxml.jackson.core
        jackson-databind
        2.15.3 
    
    
  2. 配置文件中配置数据库的连接信息
    spring.redis.host=localhost
    spring.redis.port=6379
    #如果Redis没有密码此项可以不设置
    #spring.redis.password=123456
    spring.redis.database=0
    
  3. 创建配置类,生成RedisTemplate的Bean对象放到IoC容器中
    @Configuration
    public class RedisConfig {
        @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate redisTemplate = new RedisTemplate<>();
            // 设置连接工厂
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            //设置字符串序列化器
            redisTemplate.setKeySerializer(RedisSerializer.string());
            redisTemplate.setValueSerializer(RedisSerializer.json());
            //设置hash的序列化器
            redisTemplate.setHashKeySerializer(RedisSerializer.json());
            redisTemplate.setHashValueSerializer(RedisSerializer.json());
            
            return redisTemplate;
        }
    }
    
  4. 自动装配 RedisTemplate,并在程序中调用相关API使用
    //类中自动装配
    @Autowired
    private RedisTemplate redisTemplate;
    //方法中直接使用
    redisTemplate.opsForValue().set(key, value);
    

你可能感兴趣的:(redis,数据库)