![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
float_yy
键盘敲烂,年薪百万
展开
-
Redis数据结构
一、简单动态字符串(SDS)Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 用作 Redis 的默认字符串表示。SDS是一个抽象数据结构,它的结构如下:SDS 实现了空间预分配和惰性空间释放两种优化策略,使其比一般的C字符...原创 2019-05-30 13:45:46 · 214 阅读 · 0 评论 -
Redis 简介
Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所...原创 2019-06-01 15:31:28 · 107 阅读 · 0 评论 -
Redis应用场景
Redis实际应用场景1、显示最新的项目列表下面这个语句常用来显示最新项目,随着数据多了,查询毫无疑问会越来越慢。SELECT * FROM foo WHERE … ORDER BY time DESC LIMIT 10在Web应用中,“列出最新的回复”之类的查询非常普遍,这通常会带来可扩展性问题。这令人沮丧,因为项目本来就是按这个顺序被创建的,但要输出这个顺序却不得不进行排序操作。类似的...转载 2019-06-01 15:24:40 · 178 阅读 · 0 评论 -
Redis事务
Redis通过 MULTI、EXEC、WATCH 等命令实现事务(transaction),事务提供了一种将多个命令请求打包,然后一次性、按顺序执行的机制。一、事务的实现1、事务开始MULTI命令将执行命令的客户端从非事务状态切换到事务状态。2、命令入队当客户端处于事务状态时,客户端发送的命令不一定被服务器马上执行,如果客户端命令是EXEC、DISCARD、WATCH、MULTI中的一个...原创 2019-06-01 15:02:11 · 92 阅读 · 0 评论 -
Redis发布与订阅
Redis的发布与订阅功能由 PUBLISH、SUBSCRIBE、PSUBSCRIBE 等命令组成。1、SUBSCRIBE通过subscribe命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者:每当有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。unsubscribe 命令可以退订指定频道2、PUBLISH通过命令 publish < channe...原创 2019-06-01 11:28:30 · 98 阅读 · 0 评论 -
Redis集群
Redis集群是Redis的分布式数据库方案,集群通过 分片 来进行数据共享,并提供了 复制和故障转移 功能。1、节点的握手命令 cluster meet < ip> < port> 可以将指定ip:端口的节点添加到当前客户端的集群中来。这时该节点会与集群中所有的节点进行握手。上图显示了集群中的节点A与节点B的握手过程,如果集群中还有其他节点,节点B还会依次与其他节...原创 2019-06-01 11:12:50 · 101 阅读 · 0 评论 -
Redis哨兵Sentinel
Sentinel 是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及它们的下属从服务器。1、Sentinel基本监视原理如下图显示,Sentinel系统监视了一个主服务器server1和它的三个从服务器server2、3、4.当server1因为某种情况下线时,Sentinel系统会对server1做出 故障转移 处理,将...原创 2019-06-01 10:25:57 · 286 阅读 · 0 评论 -
Redis复制
在Redis中,用户可以通过执行 SLAVEOF 命令或者设置slaveof选项,让一个服务器去 复制(replicate) 另一个服务器,被复制的服务器叫 主服务器,主动去复制的服务器叫 从服务器。从服务器就相当于主服务器的客户端。命令 SLAVEOF < master_ip > < master_port > 可以让客户端去复制服务器。复制状态中的主从服务器双方的数...原创 2019-05-31 13:00:50 · 119 阅读 · 0 评论 -
Redis客户端和服务器
一、Redis客户端redisServer结构中保存了所有客户端的状态信息。struct redisServer{ //... //一个链表,保存了所有客户端状态 list *clients;};命令 client list 可以列出目前所有连接到服务器的客户端。命令 client setname < name > 可以给客户端设置一个名字。伪客户端由于服务器...原创 2019-05-31 12:33:18 · 1188 阅读 · 0 评论 -
Redis 事件
Redis服务器是一个事件驱动程序,服务器需要处理下面两种事件:1、文件事件:服务器与客户端的通信会产生相应的文件事件,服务器通过监听并处理这些事件来完成一系列网络通信操作。2、时间事件:Redis服务器中的一些操作需要在给定的时间点执行,服务器监听时间事件来完成一些定时操作一、文件事件Redis基于Reactor模式实现了 文件事件处理器:1、文件事件处理器使用 I/O多路复用程序 同...原创 2019-05-30 22:23:32 · 151 阅读 · 0 评论 -
Redis AOF持久化
1、概述与RDB持久化不同,AOF持久化是通过保存Redis服务器执行的写命令来记录数据库状态的因为客户端每发送一个命令就会导致AOF文件的更新,因此AOF文件的更新比RDB文件频繁很多。每当有一个新的命令到来,不一定是马上就写入到AOF文件中,这个与服务器配置中的appendfsync选项值有关。2、AOF文件的载入与数据库状态恢复因为AOF文件里包含了重建数据库状态所需的所有写命...原创 2019-05-30 19:47:46 · 119 阅读 · 0 评论 -
Redis RDB持久化
RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态(数据库信息和所有数据库中的键值对)保存到一个RDB文件中RDB文件是一个经过压缩的二进制文件可以将数据库状态保存为RDB文件,也可以通过读取RDB文件,加载数据库状态。一、RDB文件的创建与载入RDB文件的创建可以用 save 或者 bgsave 两种方式,前者是将服务器当前的任务阻塞然后...原创 2019-05-30 17:17:03 · 146 阅读 · 0 评论 -
Redis中的数据库
Redis服务器中的所有数据库都保存在一个数组中,Redis服务器默认会创建16个数据库。一、切换数据库默认情况下,Redis客户端的目标数据库为 0号数据库,客户端可以通过select命令切换数据库。指令 select 2 将切换到2号数据库。二、数据库的结构如上图所示,redisServer结构 代表Redis服务器,它有一个db数组,数组里装的元素是redisDB结构。redi...原创 2019-05-30 16:56:06 · 141 阅读 · 0 评论 -
Redis对象
Redis中将键和值关联起来时,会创建至少两个对象,键对象 和 值对象Redis中的每个对象都由一个redisObject结构表示,该结构中有type、encoding和ptr三个属性。结构实现如下:typedef struct redisObject{ //类型 unsigned type:4 //编码 unsigned }robj;一、type使用 type <...原创 2019-05-30 15:56:55 · 152 阅读 · 0 评论