Redis一些常用知识点
2021-01-25 15:32:09 15 举报
AI智能生成
Redis一些常用知识点
作者其他创作
大纲/内容
MemCache
只支持KV的存储形式
key的大小不能超过250直接
值的大小不能超过1M
最大过期时间为30天
没有持久化和主从同步功能
准备工作
DockerRedis安装
子主题
linux安装
redis.conf详解
daemonize no
是否启用守护进程
也叫Daemon 进程,是linux中的后台服务进程
就相当于开启后台运行
设置为Yes
Redis采用的是单进程多线程的方式,设置后采用后台运行的方式
会将进程号写入 pidfile /var/run/redis_6379.pid中
除非手动Kill掉该进程
默认否
exit或者关闭终端都会导致Redis进程退出
bind 127.0.0.1
只能通过本机客户端连接,而无法通过远程连接
loglevel notice
日志级别默认verbose
debug
输出大量信息,一般在开发和调试时使用
verbose
比debug稍微好些,剔除了一些不必要的日志
notice
适用于生产环境
warning
仅记录一些重要的信息
dir
指定本地数据库位置
maxclients
最大连接数(默认10000 ,设置0表示不作限制)
超出限制报错(max number of clients reached)
maxmemory <bytes>
最大内存限制
Redis 在启动时会把数据加载到内存中,达到最大内存后,会尝试清除已到期或者即将到期的Key
清除后如果任然是最大内存,将会变成只读不可写操作
在64位下,不设置或者设置为0,默认无限制内存,在32位下,限制为3GB
一般为了最大性能,配置为3/4的内存
进阶
持久化
RDB和AOF是可以共存的,备份时,先备份的为AOF文件
在备份恢复时,假设AOF文件有问题(有些错误的命令,或者因为上次备份时未完全写全),出现文件破损,Redis是有自动修复文件的,会将错误的命令删除
RDB(Redis Data Base)
存储方式
就是每隔时间段会将内存中的数据快照写入到磁盘,然后恢复的时候直接将快照恢复到Redis
整个过程,主进程不进行IO操作,会覆盖之前的文件,RDB会存在数据丢失最后一次的情况,对数据要求性不高的话可以使用
保存的是Rdb.dump文件
存储触发条件
save <秒数> <变更次数>
优势
适合大规模数据恢复
对数据的完整性和一致性要求不高
劣势
因为是一段时间内备份一次数据,所以可能会存在丢失最后一次数据的可能性
由于备份时是需要Fork一个新的进程去处理,所以在资源方面是也需要双份的
总结
Rdb在保存文件时,父进程唯一要做的就是fork出一个子进程,事情全部使用子进程来处理,可以最大化Redis的性能,
与AOF相比,由于不是一条一条语句备份,所以会比RDB快一些
AOF(Appen Only File)
存储方式
以日志的形式记录每一次写的操作命令,恢复时也通过命令恢复
Rewrite
概念
就是当文件过大时,会对内容进行压缩,只保留可恢复数据的最精简指令集
重写原理
其实是新Fork了一个子进程,并没有去读旧的aof文件,而是重新整理出一份命令指令
auto-aof-rewrite-percentage 100 100% 一倍
auto-aof-rewrite-min-size 64mb 重写文件日志大小(一般3G起步)
auto-aof-rewrite-min-size 64mb 重写文件日志大小(一般3G起步)
配置策略
appendonly 是否开启aof
appendfilename 名字
appendfsync 追加方式
always
同步追加、数据完整性较好,但性能消耗过大
EverySec默认
异步追加、间隔一秒、那么就存在一秒的数据丢失
NO
如何选择
如果对数据完整性不高,而且数据又很多,而且又追求效率,那么可以使用RDB
如果只做缓存的话,可以都不选择使用
建议两种都选用 也不要仅仅只使用AOF来作为唯一方式,因为RDB更适合于数据库备份
用RDB时,只在从机器上持久化RDB文件,时间间隔也不要太短,15分钟差不多了,而且值保留Save 900 1规则即可
用AOF时,对重写基础值大小可以更改为5G左右,64太小了
如果不用AOF 仅靠主从复制也可以实现高可用,代价是如果主从同时停掉,则会丢失10多分钟的数据,恢复时也会比较两个RDB文件,恢复较新的文件
总结
Rdb是全量持久化、AOF是增量持久化,因为RDB比较耗时,不够实时,停机时会导致大量数据丢失,所以一般配合AOF使用,先恢复RDB的内存数据,在恢复最近的AOF命令
事务
可以顺序的执行一组命令,批处理执行任务
操作命令
Redis支持事务,但是是支持部分事务
发布和订阅机制
一种进程间的通信模式
类似于消息机制,pub推送 sub接收命令
主从复制
一主二仆
作用
读写分离
容灾备份
查看角色命令
info repliation
指定主机命令
slaveof 主机
机制
丛机会从头到尾复制主机的数据
只有主机才能写,丛机无法写入
假设主机挂了之后,丛机还是从机,不会由从变主,主机恢复后还是主机身份
如果从机挂了之后,需要重新连接进主机,不然不会变成原来的主机
薪火相传
就是从也可以做为其他从的主机
反客为主 salveof no one
就是与其他数据库脱离关系,变身为主机
复制原理
slaveof 首次全量复制、然后增量复制
哨兵模式
概念
哨兵模式就是监控模式
假设主机挂了,会选取出新的主机,可理解为自动 salveof no one
主机从新启动后,会被哨兵监控住变更成从机
配置文件
sentinel.conf
缓存雪崩、穿透、击穿
雪崩
概念
同一时间,大多数缓存失效,导致压力全到数据库中
解决办法
给缓存加上随机时间,让缓存不会同时失效
将热点数据分步到不同的地方也行
穿透
概念
查询缓存和数据库中都不存在的数据
解决办法
返回不存在的缓存
使用布隆过滤器
击穿
概念
热点数据,如果失效了
解决办法
设置永不过期
读取方式
读的时候,先读缓存,缓存没有在去数据库中查询,然后设置到缓存中
写的时候先写数据库,在删除缓存
Redis做分布式锁
常用命令
setnx <key><value>
不存在值时则Set
setex <key> <secend><value>
设置失效时间的Key
ttl<key>
查看剩余时间,为负数说明已经过期
需要注意什么问题?
单机版Redis会有什么问题?
集群模式下(3主3从)有没有什么问题?
高级用法
HyperLogLog
命令
查看Redis版本信息
redis -server -v
info
常用类型及用法
String
做分布式锁
计数 incr
Hash
购物车就可以用这个来做
Map<String,Map<K,V>>
比如说存储一个人的某条记录信息
hset person age 18
hgetall person
List
有序的可有重复数据
Lpush Rpush
微信文章订阅公众号,存储用户编号+文章编号
Set
无序不可重复数据
随机弹出一个元素,但是不删除
随机弹出一个元素、删除
重要的集合运算
差集
交集
并集
抽奖
点击参与抽奖-进入集合 Sadd
查看人数 Scard
抽奖 随机抽出
朋友圈点赞功能
新增点赞 sadd
取消点赞srem
互相关注的人
可以取交集的数据
Zset(有序集合)
比方说商品销售排行榜
热门视频排行
BitMap(位图)
HyperLogLog(统计)
GEO(地理)
LRU
是什么
Least Recently Used
选择最近最少使用的数据予以淘汰
核心
hash链表
手写LRU
LinkedHashMap实现
代码
依赖JDK
收藏
0 条评论
下一页