发布者:上海IT外包来源:http://www.lanmon.net点击数:1302
蓝盟IT小贴士,来喽!
Redis是2009年发布的,今天已经超过了10岁。 作为必须的技能之一,关于那个也有说不完的话题。 本文的每一点都可以展开,完成中等规模的文章。
在交流和面试时,你需要用最正确的语言描述,所以本文适合你。
redis能力:
1 0W/s QPS (redis-benchmark )
1w长链接(netstat/ss )
最复杂的Zset 6kw数据写入1k/s读出5k/s平均需要5ms。
永久化(rdb )
1 .基本概要
要学习新语言,掌握其基本数据结构和这些数据结构的API很重要。 redis的这些数据结构就像语言一样。
Redis数据结构
常用5种,共计10种。 面试时一般回答5种即可,其他5种是加分。
String字符串
Hash词典
List列表
Set集合
ZSet秩序集合。 性能参考: 《redis的zset有多牛?请把耳朵递过来》
Pubsub发布订阅(推荐,坑多)
Bitmap位图
GEO地理位置(限定使用,附近的人)
Stream流(5.0 ) (与Kafka非常相似)
Hyperloglog基数统计
Redis协议
Redis是文本协议
RESP以CRLF结束(\r\n )
re SP3 (启用redis 6,添加客户机缓存)
Redis的基础数据结构
在数据量少和大的情况下,往往不同,我们关注大数据量的主要结构。
String-sds
混列- (zip list,dict )
Set-(intset,dict )
List-(ziplist,quicklist )
ZSet-(ziplist skiptable跳表)
Stream-(radix-tree基数)
跳台的关注度比较大,在Java中可以参考ConcurrentSkipListMap这样的实现。
另外,在Java中有序的Set被称为TreeSet,但它是用红色黑色的树实现的。 请注意区别。
Redis持久化方式
生产环境一般只采用RDB模式。
RDB
aof (就像binglogrow模式)
混合模式: RDB AOF
O(n )命令
keys *
hgetall
smembers
sunion
是.
如果集合大小不确定,建议改用scan hscan sscan zscan。 此外,像keys这样危险的命令最好使用RENAME命令屏蔽。性能优化。
unlink删除key -大于异步避免块
pipeline批量传输,降低网络RTT大于频繁的网络交互
多值指令(hmset)-大于减少频繁的网络交互
大于避免关闭aof的io_wait
扩展方式
lua
redis-module
模块模式知道的人很少,属于比较下层的开发。
2 .问题的排除
回显正在执行monitor命令的所有命令。 可以用抓取配合进行过滤
Keyspace-events订阅特定key的事件。 例如,删除某个数据的事件的基础实现是基于pubsub的。
slow log顾名思义,查询很多,非常有用。
--bigKeys启动参数Redis大key健康诊断。 不用担心堵车,用scan方式执行
内存使用密钥,内存状态命令
注意info命令、instantaneous_ops_per_sec、used_memory_human和connected_clients
redis-rdb-tools rdb线下分析
三.淘汰战略
如果你应聘redis dba,这个问题就不能回答,直接被淘汰。
被动删除(仅在到达get时删除NIL并返回是惰性删除)
活动删除(执行一次100ms,随机删除持续25ms,类似于Cron )
由于内存使用量超过了maxmemory,因此会触发主动清理策略。
对于第三种情况,有八种战略。 请注意,redis已经有LFU了。
默认的volatile-lru从设置过期的数据集中搜索最近的最低使用量。
volatile-ttl优先从设置过期的数据集中删除剩馀时间较短的Key。
volatile-random从设置过期的数据集中任意选择数据销毁。
volatile-lfu从过期数据集中删除最近不太使用的数据处置。
allkeys-lru
allkeys-lfu
allkeys-random数据使用频率最低,优先淘汰。
no-enviction
如果不设置maxmemory,Redis将继续使用内存直到启动操作系统的OOM-KILLER。
4 .集群模式
单机。
单多实例。
主从站(1 n )
主从(1 n )哨兵(3或基数个)
Redis Cluster (推荐,但使用有限)。 参考: 《与亲生的Redis Cluster,来一次亲密接触》internet建议使用Redis Cluster使外包、项目自由。
大规模
twemproxy
科迪斯
基于Netty Redis协议的自研
管理平台: CacheCloud
5 .关于5. Redis的常见问题
使用Redis的场景
缓存(缓存完整性缓存贯通缓存破坏缓存雪崩)
分布式锁定(redlock )
分散限流
会话数
API示例:
zset排名,排名
bitmap用户签名,在线状态
geo地理位置,附近的人
类似streamkafka的消息流
hyperloglog每日访问ip数统计
高速缓存完整性
为什么会有一致性的问题?
写入缓存和数据库是两个不同的组件,如果涉及双重写入,则只有一个写入可能成功,数据不一致。
更新。 更新的情况也一样,需要更新两个不同的组件。
读取。 读取确保从缓存读取的信息是最新的,与数据库中的一致。
删除。 删除数据库记录时,缓存中的数据也如何删除?
文/上海蓝盟 IT外包专家
分享到: