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