redis 是基于客户端-服务端模型以及请求/响应协议的TCP服务。也就是说每次请求都需要建立 TCP 连接并发送命令和接受返回数据。所以当我们有大量的命令需要执行的话那么就需要花费太多的时间在 TCP 连接建立上。
依次 TCP 连接之后可以执行多条命令这样就可以提升命令执行速度,减少不必要的消耗,redis 就是通过支持管道技术来实现的。
管道示例如下:
> $ (printf "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
+PONG
+PONG
+PONG
发布订阅实现了不同的客户端对不同的频道发送消息或者订阅不同的频道接收消息。
我们现在一个客户端连接中订阅频道 one 和 two
127.0.0.1:6379> subscribe one two
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "one"
3) (integer) 1
1) "subscribe"
2) "two"
3) (integer) 2
在另外一个客户端像 one 发送消息
127.0.0.1:6379> publish one hello
(integer) 1
127.0.0.1:6379> publish one world
(integer) 1
在第一个客户端可以看到如下输出
1) "message"
2) "one"
3) "hello"
1) "message"
2) "one"
3) "world"
使用 UNSUBSCRIBE命令取消订阅一个或多个或所有频道
127.0.0.1:6379> unsubscribe one
1) "unsubscribe"
2) "one"
3) (integer) 0
127.0.0.1:6379> unsubscribe
1) "unsubscribe"
2) (nil)
3) (integer) 0
订阅也支持模式匹配订阅
psubscribe news.*
以上命令订阅了 news.music news.book等频道。
当模式匹配订阅和频道订阅重复时会收到两次消息,一条message类型,一条pmessage类型。
psubscribe news.*
subscribe news.book
脚本是 redis 服务器内置对 Lua 脚本的支持,并未大量使用过。
非著名程序员,全栈开发工程师,长期专注系统开发与架构设计。
功能待开通!
redis 的 string 类型是支持过期设置的,默认是永不过期的。 Redis 设置过期 redis 中设置设置 key 过期有3中方式 第一种在设置值的时候指定过期时间 Set 命令格式 SET key value [EX seconds] [PX milliseconds] [NX|XX] EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。 PX millisecond :设置键的过期时间为 millisecond 毫秒。 3. SET key value PX m
Redis 作为高效的缓存数据库,单机也能够表现出很好的性能。但是随着数据的增加、并发的增加,单机模式的 Redis 会受到单机性能、容量、稳定性的限制,即使 Redis 提供了稳定的持久化方案,但是单机服务器始终是部署在单个机器上,如果运行机器本身的服务器出现问题我们很难在短时间恢复服务。所以 Redis 提供了三种多机模式: 主从复制模式 哨兵模式 集群模式 redis集群模式 哨兵模式解决了主节点挂掉的问题,但是没有解决从节点挂掉的问题,而 redis 集群模式可以有效的解决这个问题。redis集群中的数据是和槽(slot)挂钩的,一共定义了16384个槽,所有的数据使用一致性哈希分
Redis 作为高效的缓存数据库,单机也能够表现出很好的性能。但是随着数据的增加、并发的增加,单机模式的 Redis 会受到单机性能、容量、稳定性的限制,即使 Redis 提供了稳定的持久化方案,但是单机服务器始终是部署在单个机器上,如果运行机器本身的服务器出现问题我们很难在短时间恢复服务。所以 Redis 提供了三种多机模式: 主从复制模式 哨兵模式 集群模式 哨兵模式 主从复制模式解决了数据备份和单机可能存在的性能问题,但是也引入了新的问题,一主多从,在使用过程中,如果主服务器挂掉那么整个 Redis 服务的写就挂掉了,如果一个从服务器挂掉那么调用方就无法正确的读数据了,只能通过修改调
redis 中内存管理没有直接使用 C 语言提供的方法而是做了一个可管理已分配内存大小及添加了自己分配策略的实现,下面从 SDS 开始去了解 redis 的内存管理实现及策略。 SDS 内存管理函数定义如下: src/sdsalloc.h #include "zmalloc.h" #define s_malloc zmalloc #define s_realloc zrealloc #define s_free zfree s_malloc 内存申请、s_realloc 内存重新分配、s_free 内存释放,这里定义分别是 zmalloc.h 里三个函数的别名,而 zmalloc zrea
有时候我们需要在短时间内往 redis 里插入大量的数据,我们如果单条单条的出入会浪费很多时间和服务器资源,我们可以使用管道来实现快速的插入。 netcat 我们把需要插入 redis 的数据创建为如下的一个命令集文件 set key1 val1 set key2 val2 ... set key3 val3 我们使用如下命令执行数据导入 > $ cat /tmp/test|nc localhost 6379 +OK +OK +OK pipe mode 使用 netcat 并不是一个可靠地方式,因为用netcat进行大规模插入时不能检查错误。从Redis 2.6开始redis-cli支