redis学习
2021-07-28 14:51:54 11 举报
AI智能生成
登录查看完整内容
redis
作者其他创作
大纲/内容
lua脚本保证原子性
看门狗机制续期
发布订阅实现通信
分布式锁redisson
BloomFilter
插件机制
布隆过滤器
缓存穿透(大量不存在的key)
互斥锁
热点数据永不失效
缓存击穿(单个热点key失效)
加随机值
集群部署
缓存雪崩(大量key同时失效)
问题:先更新db还是先更新缓存?是删除缓存还是更新缓存?
延时双删
双写一致性
常见问题
多路IO复用
快的原因
主数据:项目,楼层,楼栋,商铺
资源位信息:一个项目的资源位设置完成后,应该很少改动
广告位信息:资源位设置广告位后,半年才允许变更一次
各种审批列表:审批信息一旦结束,则不会再变回
广告位排期:按照广告位缓存。一旦计划创建完成后,很长一段时间,不会再针对这个广告位创建新计划
设备列表:新增后基本不变
计划列表和素材列表,考虑变更性比其他列表大,可以不用缓存。
广告项目可用缓存的地方
简单,动态,快速,二进制安全
特点
set/get
mset/mget
strlen/append
incr/decr
setnx/setex
常用命令
普通存储字符串
自增变量(浏览次数,访问量)
简易分布式锁
jpg图片或者序列化的对象
应用场景
String
是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象
hset/hget
hmset/hmget
hkeys/hvals
hexists/hlen
存储、读取、修改用户属性
Hash
是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
lpush/lpop
lindex/llen
ltrim/lrange
blpop/brpop
列表存储
消息队列
分页展示
List
是 String 类型的无序集合。集合成员是唯一的。添加,删除,查找的复杂度都是 O(1)
sadd/srem
smembers/sismember
scard/spop
sinter/sdiff/sunion
共同好友/推荐好友
利用唯一性,统计访问网站的唯一ip
Set
zadd/zrem
zrange/zrangebyscore/zrank
zcard/zscore/zcount/zincrby
各种排行榜
带权重的消息队列
SortedSet
是用来做基数统计的算法每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数
pfadd/pfocunt/pfmerge
统计注册 IP 数 统计每日访问 IP 数 统计页面实时 UV 数 统计在线用户数 统计用户每天搜索不同词条的个数
HyperLogLog
主要用于存储地理位置信息,并对存储的信息进行操作
geoadd/geopos
geodist/georadius
根据定位点范围搜索
Geo
发布、订阅机制(类似于消息队列)
subscribe/publish/unsubscribe
psubscribe/punsubscribe
广播通知分布式锁广播
pub/sub
位图,其实也就是 byte 数组,用二进制表示,只有 0 和 1 两个数字
getbit/setbit
统计每日用户的登录数bloomfilter 但一般都用Google的
Bitmap
基本类型和使用场景
键值的底层都是sds(简单动态字符串)
AOF缓存区
记录本身长度 C需要遍历
空间预支配
惰性空间释放
修改字符减少内存重新分配
C只能保存文本数据 无法保存图片等二进制数据
sds是使用长度去判断
二进制安全
SDS
数据库 哈希键
hash冲突用单向链表解决
会逐渐rehash 新的键值对全部放到新的hash表
渐进式 rehash
一个平时用 一个rehash时候用
每个字典带 两个hash表
hash字典
链表
跳跃表
压缩列表?
底层结构
# save 3600 1# save 300 100# save 60 10000
fork(),生成一个dump.rdb文件可以指定save时间设置。占用空间小。适合容灾备份。恢复时加载速度比 AOF快缺点:1:可能丢的数据时间较长2:数据集大是,fork可能很耗时
rdb
appendonly noappendfilename \"appendonly.aof\"# appendfsync alwaysappendfsync everysec# appendfsync no
1:丢失数据少2:文件过大时,可通过配置或者手动rewrite重写。3:数据出错时,可通过redis-check-aof修复
aof
混合模式
持久化
特点:* 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库* 从数据库一般都是只读的,并且接收主数据库同步过来的数据* 一个master可以拥有多个slave,但是一个slave只能对应一个master* slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来* master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务* master挂了以后,不会在slave节点中重新选一个master
常用命令:slaveof 192.168.1.1 6379 (高版本replicaof)slave-read-onlyinfo replication
存在问题:一旦主节点挂掉,则不能提供写服务
主从
集群监控
消息通知
故障转移
功能
* sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义* 当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master* 当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据* sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群* 多sentinel配置的时候,sentinel之间也会自动监控* 当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心* 一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis* sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了
* 每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个 PING 命令 * 如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel标记为主观下线。 * 如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每秒一次的频率确认master的确进入了主观下线状态* 当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认master的确进入了主观下线状态, 则master会被标记为客观下线 * 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave发送 INFO 命令 * 当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次 * 若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除; 若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除
工作机制
修改sentinel.confdaemonize yeslogfile \"/usr/local/redis/sentinel.log\"dir \"/usr/local/redis/sentinel\" #sentinel工作目录sentinel monitor mymaster 192.168.30.128 6379 2 #判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数sentinel auth-pass mymaster 123456sentinel down-after-milliseconds mymaster 30000 #判断master主观下线时间,默认30s
配置
问题:无法动态扩容
哨兵(sentinel)
* 多个redis节点网络互联,数据共享* 所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用* 不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点(16384个slot)上, 并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为 * 支持在线增加、删除节点* 客户端可以连接任何一个主节点进行读写
cluster-enabled yescluster-config-file nodes_7001.confcluster-node-timeout 15000redis-cli -a 123456 --cluster create IP host ...CLUSTER NODES
CRC16(key) % 16384
子主题
一致性哈希(hash环)
哈希分布
虚拟槽
引申
集群(cluster)
高可用
redis学习
0 条评论
回复 删除
下一页