redis进阶 - Go语言中文社区

redis进阶


关于redis优点:

1.速度极快 10 万次 qps 的读写
2.持久化 使用 快照RDB 或 日志AOF的方式 
3.支持多种数据结构 hash list string set zset
4.支持多种编程语言 提供api 多个语言都可以直接使用 如Java、PHP、Python、Ruby、Lua、Nodejs
5.功能丰富 如发布订阅、Lua 脚本、事务、Pipeline(管道,即当指令到达一定数量后,客户端才会执行)
6.简单。不依赖外部库、单线程、只有 23000 行 Code。
7.主从复制。主节点的数据做副本,这是做高可用的基石。 自古互联网留下来的教训 单台机器不靠谱
8.高可用和分布式 Redis-Sentinel(v2.8)支持高可用,Redis-Cluster(v3.0)支持分布式。

常见的应用场景:

1.缓存系统 缓解db压力(这个是大家完全达成共识的场景)
2.计数器 可以使用incrby 和 decrby 比如文章浏览、转发、点赞、评论 这些数据统计
3.消息队列系统 一些高并发操作 或者 排队处理某些业务 比如秒杀等等
4.排行榜 使用zset数据结构 比如 点赞排行榜等
5.社交网络 比如QQ之类的社交产品 用户登录状态、群消息计数

6.按照用户投票和时间排序 比如csdn blog可以通过时间和访问量 去排序

底层实现:

https://blog.csdn.net/caishenfans/article/details/44784131

常见架构:

 

整体通讯流程:

1.client 首先找到一个可用的Sentinel节点
2.client 调用Sentinel, 来获取masterName或者slaveName这个时候,Sentinel 会返回真正的名称和地址

3.client 连接对应redis节点进行操作

Sentinel 节点作用:

监控redis服务是否可达,如果某个节点不可达对其做下线标示。
如果下线节点为matser节点,Sentinel会发起投票选其中一个slave节点升级为master节点

在某些场景下也有可能会选出多个master,等待一段时间后重新选举

 

maxmemory 置换策略:

noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据
volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据
volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据
volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据

 

扩展知识:

 

Redis 借鉴了 Linux 操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本。所以我们在生产环境通常选取偶数版本的 Redis,如果对于某些新的特性想提前了解和使用,可以选择最新的奇数版本。

持续补充.

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/liangguangchuan/article/details/80606445
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 12:13:10
  • 阅读 ( 1385 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢