开发必知Redis
2020-04-02 18:44:39 0 举报
AI智能生成
开发必知Redis知识体系梳理,包含redis数据类型解析、高级功能应用、分布式方案、开发介绍等。
作者其他创作
大纲/内容
高级功能
发布订阅
定义
基于channel实现
使用
发布
订阅
缺点
没有持久化,会丢消息
事务
定义
解决多个命令的原子性问题
特点
按命令进入队列的顺序执行
不会受到其他客户端的请求的影响
使用
开启事务:multi
执行事务:exec
取消事务:discard
监视:watch
问题
在执行exec前发生错误
在执行exec后发生错误
LUA脚本
定义
轻量级脚本语言,可以在Redis中执行
好处
一次发送多个命令,减少网络开销
Redis将整个脚本作为一个整体执行,保持原子性
对于复杂的命令组合,可以放在文件中实现复用
使用
Redis中调用Lua脚本
Lua脚本中调用Redis命令
在Redis中调用Lua脚本文件
Lua脚本缓存
lua-time-limit 5000
script kill
场景
ip限流
内存回收
回收触发
key过期
内存达到上限,触发内存淘汰
过期策略
惰性过期
定期过期
淘汰策略
LRU
volatile-lru
allkeys-lru
问题
LFU
volatile-lfu
allkeys-lfu
random
volatile-random
allkeys-random
volatile-ttl
noeviction
持久化
RDB
自动触发
配置规则
shutdown
flushall
手动触发
save
bgsave
优势
劣势
AOF
AOF 持久化策略
AOF重写机制
优势
劣势
分布式
主从复制
过程
主从连接
数据同步
命令传播
问题:单点故障
哨兵机制
过程
监控
通知
自动故障转移
问题
主从切换会丢失数据
无法水平扩容
分布式方案
客户端Sharding
Jedis
代理Proxy
Twemproxy
Codis
服务端分片
分片策略
虚拟槽
一致性hash
RedisCluster
优势
不足
开发应用
Java客户端
Jedis
Luttuce:SpringBoot2.0后默认客户端
Redisson:基于Redis提供了许多分布式方案
数据一致性问题
先更新数据库,再删除缓存
重试
异步更新
先删除缓存,再更新数据库
延时双删
高并发问题
热key发现
客户端统计
代理层统计
服务端统计
缓存雪崩
缓存不过期,主动更新
过期时间加随机数
缓存定时预先更新
针对key失效后的落库加互斥锁或队列
缓存穿透
缓存空数据或特殊字符串
布隆过滤器
SQL和NoSQL
SQL(泛指关系数据库)
特性
Table形式、基于行存储
固定的schema
表与表之间存在关联
支持SQL操作和复杂关联查询
通过支持事务提供数据一致性
产品
Oracle\MySQL\SOLServer
劣势
水平扩展需要复杂的技术
表结构修改困难
基于磁盘的读写压力比较大
NoSQL(Not Only SQL)
特性
存储非结构化数据
表与表之间无关联,容易扩展
保证数据的最终一致性
支持海量数据存储和高并发读写
支持分布式,对数据分片、扩缩容简单
产品
kv存储:Redis、MemcacheDB
文档存储:MongoDB
列存储:HBase
图存储:Neo4j
对象存储、XML存储等
NewSQL
结合了SQL和NoSQL的特性
TIDB
Redis描述
特性
丰富的数据类型
支持单机和分布式
功能丰富
replication
LUA脚本
LRU驱动事件
事务
不同级别的磁盘持久化
支持多种编程语言
高可用、集群
安装启动
安装
Linux
Windows
Docker
配置
- redis.conf
- 启动时携带参数
- config set动态设置
命令参考
数据类型
string
描述:Binary-safe strings
存储类型:int\float\string
使用场景
缓存
数据共享
分布式锁
全局ID
计数器
限流
位统计
存储结构
外层哈希:hashtable存储模型
SDS
为什么不用C语言字符串
SDS特点
hash
描述:包含键值对的无序散列表
存储类型:value只能是字符串,不能嵌套其他类型
hash与string区别
使用场景
string能做的事情,hash都可以做
存储对象类型的数据:电商购物车
不适合的场景
存储结构
hash存储示例
内层哈希
ziplist
hashtable
list
描述:双向有序、元素可重复
存储类型:存储有序的字符串
使用场景
充当队列和栈
用户消息时间线
存储结构
早期版本
ziplist
linkedlist
3.2版本之后
quicklist
set
描述:无序集合
存储类型:存储无序的字符串,最大存储量2^31-1(40亿)
使用场景
抽奖:随机获取元素
点赞、签到、打卡
收藏标签
商品筛选
交集
并集
差集
用户关注、推荐模型
相互关注
我关注的人也关注了他
可能认识的人
存储结构
intset
hashtable
zset
描述:有序集合
存储类型:每个元素都有个score来实现排序
使用场景
排行榜
热搜
存储结构
ziplist
skiplist+dict
其他
BitMaps
Hyperloglog
Geo
Streams
skiplist
0 条评论
下一页