Redis设计与实现
L-Zhang
这个作者很懒,什么都没留下…
展开
-
4.Redis的数据库
Redis多数据库 一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。 每个字典类似于一个独立的数据库。每个字典对外以一个从0开始的递增数字命名,默认支持16个,不支持自定义数据库名字。 一般不同应用的数据应该使用不同的Redis实例存储。 Redis是一个键值对数据库服务器,服务器中的每个数据库都由一个redis.h/redisDb结构标识,其中re原创 2017-08-16 13:55:39 · 821 阅读 · 0 评论 -
14.耗时命令日志
耗时命令日志:当一条命令执行时间超过限制时,Redis会将该命令的执行时间等信息加入耗时命令日志(slow log)以供开发查看。可以通过配置文件的slowlog-log-slower-than参数设置这一限制,单位是微妙(1000000微秒=1秒),默认值是10000。耗时命令日志存储在内存中,可以通过配置文件的slowlog-max-len参数来限制记录原创 2017-08-24 11:40:35 · 1131 阅读 · 0 评论 -
15.Redis高级复制
Redis复制在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replication)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器被称为从服务器(slave)。进行复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称作“数据库状态一致”,或者简称“一致”。原创 2017-08-29 10:56:51 · 700 阅读 · 0 评论 -
16.Redis心跳检测
心跳检测在命令传播阶段,从服务器默认以每秒一次的频率,向主服务器发送命令:REPLCONFACK //replication_offset是从服务器当前的复制偏移量。心跳检测的作用:检测主服务器的网络连接状态;辅助实现min-slaves选项;检测命令丢失。检测主从服务器的网络连接状态通过向主服务器发送INFO replication命令,可以原创 2017-08-29 11:00:39 · 8104 阅读 · 0 评论 -
17.Sentinel
SentinelSentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案。由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继原创 2017-08-29 17:55:35 · 750 阅读 · 0 评论 -
19.Redis Cluster - 槽Slot
槽 Slot Redis集群通过分片的方式来保存数据中的键值对:集群中的数据库被分为16384个槽(slot),数据库中的每个健都属于这16384个槽的其中一个,集群中的每个节点可以处理的0个或最多16384个槽。当数据库中的16384个槽都有节点在处理时,集群处于上线状态(ok);相反,如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态(fail)。槽指派通过向节点发送CLUSTER ADD原创 2017-08-30 14:43:28 · 3528 阅读 · 0 评论 -
18.Redis Cluster - 集群
集群Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。集群数据结构一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。 每个节点都会使用一个clusterNode原创 2017-08-30 14:27:42 · 673 阅读 · 0 评论 -
20.Redis Cluster - 重新分片
重新分片Redis集群的重新分片操作可以将任意数量已经指派给某个节点(源节点)的槽改为指派给另一个节点(目标节点),并且相关槽所属的键值对也会从源节点被移动到目标节点。 重新分片操作可以在线进行,在重新分片过程中,集群不需要下线,并且源节点和目标节点都可以继续处理命令请求。集群管理工具redis-tribRedis的集群管理工具redis-trib,通过向源节点和目标节点发送命令来进行重新分片操作原创 2017-08-30 14:54:08 · 2350 阅读 · 0 评论 -
21.Redis Cluster - 故障转移
复制与故障转移Redis集群中的节点分为主节点(master)和从节点(slave),其中主节点用于处理槽,而从节点则用于复制某个主节点,并在被复制的主节点下线时,代替下线主节点继续处理命令请求。 一个节点成为从节点,并开始复制某个主节点这一信息会通过消息发送给集群中的其他节点,最终集群中的所有节点都会知道某个从节点正在复制某个主节点。故障检测集群中的每个节点都会定期的向集群中的其他节点发送原创 2017-08-30 14:57:57 · 2075 阅读 · 0 评论 -
22.Redis配置文件
Redis配置文件为了对Redis的系统实现有一个直接的认识,下面来看一下Redis的配置文件中定义了哪些主要参数以及这些参数的作用。使用包含(include)把通用配置和特殊配置分离,方便维护include /opt/redis/redis-common.conf 1)daemonize no 默认情况下,redis不是在后台运行的。如原创 2017-08-30 16:24:47 · 577 阅读 · 0 评论 -
23.Redis单机安装使用
单机安装使用下载安装:wget http://download.redis.io/redis-stable.tar.gztar xzf redis-stable.tar.gzcd redis-stablemakemake install启动停止启动Redis:redis-server 停止Redis原创 2017-08-30 17:31:21 · 665 阅读 · 0 评论 -
13.Redis简单复制
如果数据存储在一台服务器上,当硬盘出现故障时,也会导致数据丢失。为了避免单点故障,Redis提供了复制功能可以自动实现同步的功能,将数据库复制多个副本以部署在不同的服务器上。通过复制可以实现读写分离以提高服务器的负载能力。 Redis数据库分两类:主数据库、从数据库;主数据库可以进行读写操作,当发生写操作时自动将数据同步给从数据库;从数据原创 2017-08-24 11:35:05 · 840 阅读 · 0 评论 -
12.持久化RDB、AOF
持久化通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据。RDBRDB持久化通过保存数据库中的键值对来记录数据库状态的不同。将某个时间点上的数据库状态保存到一个RDB文件(经过压缩的二进制文件)中,通过该文件可以还原数据库状态。RDB持久化可以手动执行,也可以根据配置定期执行。 有两个Redis命原创 2017-08-24 11:32:47 · 942 阅读 · 0 评论 -
5.Redis中的对象
Redis内部使用一个redisObject对象来表示所有的key和value。 OBJECT 命令可以在内部调试(debugging)给出keys的内部对象,它用于检查或者了解你的keys是否用到了特殊编码 的数据类型来存储空间z。 当redis作为缓存使用的时候,你的应用也可能用到这些由OBJECT命令提供的信息来决定应用层的key的驱逐策略(eviction policies)OBJECT原创 2017-08-16 14:00:15 · 927 阅读 · 0 评论 -
6.Redis的事务
Redis的事务:Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis的最小执行单元,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令请求打包发送给Redis,然后再让Redis一次性、按顺序地执行这些命令。在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都原创 2017-08-16 14:12:30 · 834 阅读 · 0 评论 -
7.生存时间TTL
生存时间TTL有时效的数据,比如限时优惠活动、缓存或验证码等,过了一定的时间就需要删除这些数据。设置过期时间Redis可以使用EXPIRE命令设置一个键的生存时间,到时候后Redis会自动删除它。默认不设置时间的为永久存在。命令:EXPIRE key seconds //上述命令标识key键在seconds秒后会被删除, 实现访问频原创 2017-08-18 16:47:30 · 1414 阅读 · 0 评论 -
8.Redis的排序
Redis的排序SORT命令:SORT命令可以对列表类型、集合类型和有序集合类型键进行排序,并且可以完成与关系数据库中的连接查询相类似的任务。除了可以排列数字外,SORT命令还可以通过ALPHA参数实现按照字典顺序排列非数字元素。SORT命令默认是按照从小到大的顺序排列,如果想从大到小的顺序排列,需要使用DESC参数。SORT命令实现分页:通过支原创 2017-08-18 16:49:54 · 964 阅读 · 0 评论 -
9.实现消息通知
消息通知任务队列:即传递任务的队列,可以借助任务队列实现通知的过程。任务队列的好处:松耦合,生产者和消费者无需知道彼此的实现细节;易于扩展消费者,可以有多个并可以分布在不同的服务器中。Redis实现任务队列:使用Redis的列表类型,以及其LPUSH和RPOP命令实现队列的概念。BRPOP和BLPOP还实现了没有元素则阻塞机制。 优先级队列:优先原创 2017-08-18 16:53:19 · 1366 阅读 · 0 评论 -
10.管道、脚本支持
Redis的管道客户端和Redis使用TCP协议连接。不论是客户端向Redis发送命令还是Redis向客户端返回命令的执行结果,都需要经过网络传输,这两部分的总耗时称为往返时延。在执行多个命令时每条命令都需要等待上一条命令执行完才能执行,即使命令不需要上一条命令的执行结果。Redis的底层通信协议对管道(pipelining)提供了支持。通过管道可以一次性发送多条命令并原创 2017-08-18 16:56:36 · 789 阅读 · 0 评论 -
11.存储空间优化
优化Redis的存储空间Redis是一个基于内存的数据库,所有的数据都存储在内存中,所以优化存储、减少内存空间占用对成本控制来说非常重要。1.精简键名和键值;2.内部编码优化:Redis为每种数据类型提供了两种内部编码方式,并且Redis会根据实际情况自动调整。 共享对象:Redis启动后会预先建立10000个分别存储从0到9999这些数原创 2017-08-18 17:00:04 · 1105 阅读 · 0 评论 -
1.Redis简介
Redis简介Redis是REmote DIctionary Server(远程字典服务器)缩写。以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。支持的键值数据类型有:字符串类型string、散列类型hash、列表类型list、集合类型set、有序集合类型zset。 内存存储与持久化Redis可以为每个键设置生存时间原创 2017-08-15 11:26:10 · 885 阅读 · 0 评论 -
2.Redis安装使用
Redis安装Redis约定版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.4、2.6),奇数版本是非稳定版(如2.5、2.7)。下载安装:wget http://download.redis.io/redis-stable.tar.gztar xzf redis-stable.tar.gzcd redis-stablemakeR原创 2017-08-15 11:27:56 · 810 阅读 · 0 评论 -
3.Redis的数据结构
Redis的数据结构Redis支持String、Hash、List、Set和Sorted Set五种数据类型。Redis内部使用一个redisObject对象来表示所有的key和value。 字符串类型 String简介:可以存储任何形式的字符串,一个字符串类型键允许存储的数据的最大容量是512MB。常用命令:set/get/decr/incr/mget等;应用原创 2017-08-15 11:35:49 · 880 阅读 · 0 评论 -
24.Redis集群安装使用
下载安装:wget http://download.redis.io/redis-stable.tar.gztar xzf redis-stable.tar.gzcd redis-stablemakemake install部署配置要让集群正常工作至少需要3个主节点,创建6个redis节点,其中三个为主节点,三个为从节点,对应的r原创 2017-08-30 17:35:32 · 874 阅读 · 0 评论