文章目录
第三章 缓存中间件
第二节 Redis分布式缓存
3.2.1 Redis常用命令和数据结构(一)
1. Redis介绍
- Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
- 本质是客户端-服务端应用软件程序。
- 特点是使用简单、性能强悍、功能应用场景丰富。
- 官网:https://redis.io/
- 中文维护网站(更新不是最快的,基本够用):http://www.redis.cn
- 常见的客户端:Jedis、lettuce等
- spring 文档:https://docs.spring.io/spring-data/redis/docs/2.1.5.RELEASE/reference/html/
2. 通用命令
- 启动服务后打开客户端
./bin/redis-cli #还有相关的参数指令
3. 数据结构
1)String
- String数据结构是简单的key-value类型,value其实不仅是String,也可以是数字。
- 使用场景:微博数,粉丝数(常规计数),速率限制器
- 常用命令
set hello tony ex 3 # 3秒后失效
set hello tony px 3000 # 3000毫秒后失 px 3000
set hello tony nx # 只有当没有这条数据时才能设置成功
- 速率限制器是用户请求后,记录用户请求次数,当达到一定次数后不再允许其访问。
2)List
- List就是链表,相信略有数据结构知识的人都应该能理解其结构。
- 使用场景:微博的关注列表,粉丝列表
- 常用命令
3)Set
- Set就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的Set数据结构,可以存储一些集合性的数据。
- 使用场景:实现如共同关注、共同喜好、二度好友
- 常用命令
4)Sorted Set
- Sorted Set的使用场景与set类似,区别是set不是自动有序的,而Sorted Set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。
- 使用场景:排行榜、按照用户投票和时间排序
- 常用命令
5)Hash
- Hash是一个string类型的field和value的映射表
- 使用场景:存储部分变更数据,如用户信息
- 常用命令
6)GEO
- GEO 3.2 版本开始对GEO(地理位置)的支持
- 使用场景:LBS应用开发
- 常用命令
7)Stream
- Stream 5.0 版本开始的新结构“流”
- 使用场景:消费者生产者场景(类似MQ)
- 常用命令
4. 代码示例
代码参考:redisdemo
- 相关配置和API使用请查看官网介绍
- 如果代码中访问不了redis,需要调整redis的访问策略
- 在
/usr/local/redis/
目录下创建conf目录 - 在
/usr/local/redis/conf/
目录下导入官方的redis.conf文件
bind 127.0.0.1
# bind 0.0.0.0 #任意网络均可访问,但因为有安全漏洞,建议只给内网服务器ip进行绑定
# 绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。
# 这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。
# 如果bind选项为空的话,那会接受所有来自于可用网络接口的连接。
# 如上配置,绑定一个127.0.0.1的本机地址和192.168.1.100的外网地址。
- 重新启动redis,加载配置文件。
./bin/redis-server conf/redis.conf
3.2.1 Redis常用命令和数据结构(二)
1. Redis介绍
- 几种基础API的使用参考官网和代码示例。(后期有空把示例写入该文档)
- key事件通知(Redis keyspace notifications):通过发布/订阅获得key事件的通知(版本2.8或更高)。
- 可能接收的事件示例如下:
- 所有影响给定键的命令。
- 所有接收LPUSH操作的键。
- 所有在数据库0中到期的键。
- 可用场景:
- 订单超时未支付场景,定时删除,删除后会通知客户端进行处理。
- 分布式锁
- 默认不开启事件监听,如果要使用,推荐使用更改配置文件的方式
- Redis Server提供类似数据库的功能,每个Server上可以设置多个database
- 使用 select 选择第几个库
3.2.2 Redis持久化
1. 持久化介绍
- Redis的数据默认都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。
2. 持久化方式
1)RDB持久化
- RDB持久化方式能够在指定的时间间隔对你的数据进行快照存储。
i. 命令使用
- 客户端直接通过命令
BGSAVE
或者SAVE
来创建一个内存快照。BGSAVE
调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程仍然继续处理命令。SAVE
执行SAVE命令过程中,不再响应其他命令。
- 在
redis.conf
中调整save配置选项,当在规定的时间内,Redis发生了写操作的个数满足条件会触发发生BGSAVE
命令
# 900秒之内至少一次写操作
save 900 1
# 300秒之内至少发生10次写操作
save 300 10
# 60秒之内至少发生10000次
save 60 10000