码迷,mamicode.com
首页 > 其他好文 > 详细

Redis cluster学习

时间:2016-10-25 14:37:06      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:单词   服务   多个   l数据库   ring   png   数据库   show   分布式   

Redis中的5种数据类型String、Hash、List、Set、Sorted Set。

Redis源码总代码一万多行。

这篇文章有一些Redis “常识” http://www.searchdatabase.com.cn/showcontent_70423.htm

key可以是任意类型,最后都存成byte[];作者建议用 : 分隔表名,用.作为单词间的连接。(据我所知,redis只有库没有表)

 

针对KEY的操作:

命令 sort(按某个key从小到大排序,desc则是从大到小):

参考 http://www.cnblogs.com/linjiqin/archive/2013/06/14/3135921.html

10.117.146.16:8379> lpush price 30 1.5 10 8
(integer) 4
10.117.146.16:8379> sort price
1) "1.5"
2) "8"
3) "10"
4) "30"
10.117.146.16:8379> sort price desc
1) "30"
2) "10"
3) "8"
4) "1.5"

1.还可以使用alpha修饰符对字符串进行排序

2.使用limit修饰符限制返回结果

3.使用外部key进行排序

4.get有一个额外的参数规则,那就是可以用#获取被排序键的值。

5.通过将一个不存在的键作为参数传给 by 选项, 可以让 sort 跳过排序操作,直接返回结果。

6.这种用法在单独使用时,没什么实际用处。不过,通过将这种用法和get选项配合,就可以在不排序的情况下,获取多个外部键,相当于执行一个整合的获取操作(类似于 sql数据库的join关键字)。

保存排序结果

10.117.146.16:8379> sort price store ordered_price
(integer) 4
10.117.146.16:8379> lrange ordered_price 0 -1
1) "1.5"
2) "8"
3) "10"
4) "30"

返回值:
没有使用 store 参数,返回列表形式的排序结果。
使用 store 参数,返回排序结果的元素数量。

其他命令还有:KEYS

 

这一篇讲Redis Cluster的原理还比较清晰 http://www.cnblogs.com/foxmailed/p/3630875.html

  Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,
集群中的每个Redis Instance负责其中的一部分的Slot的读写。
集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,
会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。
一个Key到底属于哪个Slot由crc16(key) % 16384 决定。 关于负载均衡,集群的Redis Instance之间可以迁移数据,以Slot为单位,但不是自动的,需要外部命令触发。 关于集群成员管理,集群的节点(Redis Instance)和节点之间两两定期交换集群内节点信息并且更新,从发送节点的角度看,这些信息包括:
集群内有哪些节点,IP和PORT是什么,节点名字是什么,节点的状态(比如OK,PFAIL,FAIL,后面详述)是什么,包括节点角色(master 或者 slave)等。 关于可用性,集群由N组主从Redis Instance组成。主可以没有从,但是没有从
意味着主宕机后主负责的Slot读写服务不可用。一个主可以有多个从,主宕机时,某个从会被提升为主,具体哪个从被提升为主,协议类似于Raft,参见这里
如何检测主宕机?Redis Cluster采用quorum
+心跳的机制。从节点的角度看,节点会定期给其他所有的节点发送Ping,
cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。
通过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,
并且将其发送给其他所有节点,其他所有节点收到后立即认为该节点宕机。
从这里可以看出,主宕机后,至少cluster-node-timeout时间内该主所负责的Slot的读写服务不可用。

 

这里有一些使用Redis遇到的坑和经验 http://www.360doc.com/content/16/0425/23/16915_553797555.shtml

疑似 Cluster 脑裂?(这个名称好可怕。。)
脑裂在所谓的分布式系统中很常见,大家也不陌生,做为DBA最怕的就是Mysql keepalived 脑裂,造成主库双写。难道 Redis Cluster中也会有脑裂么?
凌晨5点接到电话,发现应用看到数据不一致,偶尔是无数据,偶尔有数据,很像读到了脏数据。
登上 Redis, Cluster Nodes, Cluster Config,确实发现不同 Redis 实例配置了不同的Cluster Nodes。
想起了昨天有对该集群迁移,下掉了几个实例,但是在 PHP 配置端没有推送配置,导致 PHP 可能读到了旧实例数据,马上重新推送一遍配置,问题解决。

技术分享

 

Redis cluster学习

标签:单词   服务   多个   l数据库   ring   png   数据库   show   分布式   

原文地址:http://www.cnblogs.com/charlesblc/p/5996331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!