缓存 & redis

cache vs buffer

cache 缓存。经常使用的东西放在离自己更近的地方,比如cpu将最近使用的数据放入缓存中,提高存取速度。redis通常被当着缓存服务器使用。

buffer 缓冲。如泄洪湖/池时,将淡水湖作为泄洪时的缓冲地带,确保下游河道的流量平稳,降低风险。

Redis定位

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存、消息队列等;

支持多种数据结构:String、Hash、List、Sorted List、Set等;

支持不同级别的持久化(RDB、AOF--redis1.1版本出现);

通过哨兵(Sentinel)机制和集群(Cluter,3.0.2版本出现)机制提供高可用性

redis cluter

集群出现的目的在于:提高可扩展性,提高可用性

redis cluster的目标:

在1000个节点的时候仍能表现得很好并且可扩展性(scalability)是线性的。

没有合并操作,这样在 Redis 的数据模型中最典型的大数据值中也能有很好的表现。

写入安全(Write safety):那些与大多数节点相连的客户端所做的写入操作,系统尝试全部都保存下来。不过公认的,还是会有小部分场景写入会丢失:(两个场景:主从之间异步复制、非强一致性保证)。

可用性(Availability):在绝大多数的主节点(master node)是可达的,并且对于每一个不可达的主节点都至少有一个它的从节点(slave)可达的情况下,Redis 集群仍能进行分区(partitions)操作。

redis cluster为了获取更好的性能和扩展性,在可用性和一致性上做出了舍弃:Redis采取了P2P而非Proxy方式、异步复制、客户端重定向(节点间不需要传递command)

redis cluster的Availability允许少数节点出错,当某一主节点及其所有的从节点都挂掉的时候,cluster不可用(试配置而定),出现的概率其实不高。

redis cluster没有采用一致性hash算法(参考:五分钟理解一致性哈希算法(consistent hashing)),而是使用了固定数码的HASH_SOLT(hash槽),减少了复杂度,reshare就是完成HASH_SOLT和节点直接的映射关系变化。

自我理解:

1、redis cluster通过固定的HASH_SOLT,将key分散到不同的节点;

2、为提高可用性,每个master节点都可以有一个/多个slave节点,当master节点死掉后,其中的某个slave节点会通过选举算法升级为master节点,继续服务;

3、redis cluster还支持备份迁移,适用于某个master节点死掉后,再也无法回来的情况下,另外的master节点,会将其slave节点贡献出来,配给刚刚升级上来的master节点,作为slave节点;

4、redis cluster为了达到高性能和高扩展性,牺牲了部分可用性和数据一致性:各个master node之间不能互为备份,在少数情况下不能完全安全写入。

5、从redis cluster的设计思路中,可以发现:架构设计的关键在于搞清楚问题域,找到关键问题点,做好取舍。


参考资料:

Redis 的几种数据结构&五种数据类型对象

Redis作者谈Redis应用场景

redis中文站点

示例:

考虑存储用户基本信息、绑定账户列表、社交信息、最近登录信息,分析下来,拟采用如下数据结构存储

用户基本信息 —— Hash

绑定账户列表 —— Set,账户信息详情使用String即可,毕竟更改账户信息场景的地方很少;

社交信息 —— Hash

最近登录信息 —— List,限定长度的列表表示,如果需要按照登录时间排序,则考虑使用Sorted List


使用redis做队列

redis提供Pub/Sub命令,提供消息发布/订阅 机制,使用List数据结构可以模拟队列,使用Sorted List可以模拟优先级的队列。

问题思考

1、redis什么场景下需要做持久化处理?

RE:作为缓存服务器使用时,可以不做持久化处理;作为数据存储服务器时,如果数据不容丢失且没有关系型数据库兜底,则需要做持久化处理。

作为缓存服务器时,不宜做持久化处理,缓存的数据可能被更改,在redis不可用期间,应用程序孩子继续修改数据,这时的修改并没有反应到redis缓存中,这时做持久化可能带来数据一致性问题。比如用户基本信息的缓存数据,不宜做持久化。

在redis当着存储服务器使用时,如果数据没有其他存储方式兜底,则需要做持久化。如用户最后登录时间,数据丢失一两次,影响不大,而且为了计算和存取速度,选择放在redis中,这时需要考虑持久化,丢一两次可以,但是不能全丢了。

2、redis cluster总的hash solt(哈希槽)的数量为什么是16384(2的14次方)?

RE:算法实现决定的。间redis官方网站解释,参考:cluster-spec

redis cluster HASH_SLOT algorithm

3、redis cluster 从节点升级为主节点的选举过程是不是一个paxos算法实现?

RE:不是。redis cluster的选举过程目标是:选举出唯一的一个从节点来代替已经FAIL掉的主节点。但是算法实现上和paxos上有一些相似之处:参加选举的原slave节点是proposaler,其他或者的master node是acceptor;

redis的使用场景案例

1、作为计数器使用

需要记录一个时间窗口期内某行为发生的次数,比如需要记录一天内用户登录失败次数,如果失败次数大于5次则锁定用户。可以这样做:用户每次登录失败,使用登录标识(手机号或者用户名)作为key,使用SET数据结构,将登录失败信息(时间戳、登录渠道)写入redis,过期时间设置为24小时;用户再次登录时,首先从redis查询该登录标识对应的登录失败记录是否超过了5次,如果没有则继续登录流程,否则报错。

由于redis记录自身天然过期,所以redis set记录写入后,无需再作更改,效率高效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容