redis随笔
痞子锐
逆水行舟 不进则退
展开
-
redis集群实现(一)集群架构与初始化
Redis是一个高可用、高性能、高可扩展性的基于内存也支持持久化存储的kv存储数据库,redis相比较于之前的kv存储memcached而言,不但支持的value类型大大增加,并且还支持数据的持久化,弥补了memcached的不能持久化的缺点,但是在3.0之前的redis并不支持集群功能,这也是redis在3.0之前不能被大量部署的一个原因,但是由于3.0以后的redis支持了集群功能,redis转载 2017-08-30 16:43:25 · 611 阅读 · 0 评论 -
redis随笔(二)----淘汰策略的原理以及实现
1 配置文件中的最大内存删除策略在redis的配置文件中,可以设置redis内存使用的最大值,当redis使用内存达到最大值时(如何知道已达到最大值?),redis会根据配置文件中的策略选取要删除的key,并删除这些key-value的值。若根据配置的策略,没有符合策略的key,也就是说内存已经容不下新的key-value了,但此时有不能删除key,那么这时候写的话,将会出现写错误。转载 2017-08-30 16:13:23 · 551 阅读 · 0 评论 -
redis随笔(三)----过期删除策略
在最近的项目中使用redis作为缓存服务器。结果在测试的过程中发现有一部分过期时间并没有及时的删除。百思不得其解,重复看了好多遍代码,也没有发现什么问题,因此可以判断不是代码的问题。随后考虑是不是redis本身的问题。从百度上找了好久才大概了解了redis的过期删除key的机制。 Redis对于过期键有三种清除策略:被动删除:当读/写一个已经过期的key时,会触发转载 2017-08-30 16:18:51 · 339 阅读 · 0 评论 -
redis随笔(四)----Redis集群搭建
Redis 集群安装(redis.3.2.6版本为例)1环境依赖安装1.1 安装gcc-c++在线安装 yum install gcc-c++1.2 安装ruby 和rubygems在线安装 yum install ruby (大于1.8.7版本即可)在线安装 yum install rubygems1.3 安装redis在线安装 gem install redis原创 2017-08-30 16:37:44 · 240 阅读 · 0 评论 -
redis集群实现(八)redis+twemproxy集群
Redis的确是一个非常高效的缓存服务器,但是单台redis服务器的内存管理能力有限,如果一味的加大内存的话会导致redis服务器的性能下降,所以就必须要搭建redis集群来提供服务。在redis官方在3.0.0版本给出集群方案之前,大部分的企业都使用twemproxy组件来进行redis集群的搭建。 twemproxy 通过引入一个代理层,可以将其后端的多台redis进行统一管转载 2017-08-30 16:51:54 · 243 阅读 · 0 评论 -
redis集群实现(七)sentinel数据结构和初始
上节我们看过了sentinel协调者模块处理集群故障节点的功能,今天我们看一下sentinel的处理架构以及sentinel的初始化流程。首先,sentinel是独立于数据节点之外的一个协调模块,sentinel不存储任何用户要求存储的key-value数据,sentinel只负责监视集群中每一个节点的运行状态以及处理故障转移。首先sentinel其实就是Redis进程的另转载 2017-08-30 16:50:16 · 579 阅读 · 0 评论 -
redis集群实现(六) 容灾与宕机恢复
实现集群,一个重要的保证就是高可用性,要在各种软件和硬件的故障情况下仍然能够提供服务。一般来说有两种解决思路,一种是每一个节点互相之间都会进行数据交互以及监控,出现故障的时候,各个节点都可以做协调任务。另一种就是增加一个协调组件来对集群进行实时监控以及故障处理。现在使用比较广泛的是第二种方案,各个模块之间低耦合,工程师先也比较简单(相对第一种而言)。上一节已经介绍过了raft协议,有了raft协议转载 2017-08-30 16:49:19 · 1067 阅读 · 0 评论 -
redis集群实现(五) sentinel的架构与raft协议
Redis在3.0.0版本开始支持集群功能,但是实现集群就要求redis能够承受单点故障,保证redis的高可用性,在各种软件和硬件的故障情况下仍然能够提供服务。一般来说有两种解决思路,一种是每一个节点互相之间都会进行数据交互以及监控,出现故障的时候,各个节点都可以做协调任务,比如kv分布式存储cassendra。另一种就是增加一个协调组件来对集群进行实时监控以及故障处理,比如zookeeper,转载 2017-08-30 16:48:15 · 653 阅读 · 0 评论 -
redis集群实现(四) 数据的和槽位的分配
不知道有没有人思考过Redis是如何把数据分配到集群中的每一个节点的,可能有人会说,把集群中的每一个节点编号,先放第一个节点,放满了就放第二个节点,以此类推。。如果真的是这样的话,服务器的利用率和性能就太低了,因为先放第一个,其他的服务器节点就闲置下来了,单个节点的压力就会非常的大,其实就相当于退化成为了单机服务器,从而违背了集群发挥每一个节点的性能的初衷。在redis官方给出的集群方案中转载 2017-08-30 16:47:25 · 1690 阅读 · 0 评论 -
redis集群实现(三)集群删除节点
Redis集群里的节点支持动态删除,但是一般情况下不会这么做,只有在节点软硬件升级的时候才会主动让节点下线。删除节点的方式就是redis-cli客户端连接到服务器,然后执行cluster forget node-id就可以了,如果是删除一个从节点的话,集群仍然是可用状态,如果是删除一个主节点的话,集群的槽位不足,就会变成不可用状态。下边看下我在自己的虚拟机运行的例子转载 2017-08-30 16:46:33 · 566 阅读 · 0 评论 -
redis集群实现(二)集群添加节点
在Redis-3.0.0里,集群添加节点是通过客户端运行cluster meet命令来实现的,命令格式是cluster meet ,如果客户端向A节点发送这条命令,ip和port分别是B节点的ip和port,就会把ip:port的机器添加进入执行命令的节点所在的集群里。具体的流程如下:1.首先客户端向A节点发送cluster meet 命令。2.A节点在本地为B节点转载 2017-08-30 16:44:13 · 410 阅读 · 0 评论 -
redis随笔(一)----redis数据淘汰策略
在 Redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:volatil转载 2017-08-30 16:09:05 · 262 阅读 · 0 评论