redis | 数据结构 | command | 常用 |
---|---|---|---|
string | string | @string | set |
list | 双向链表 | @list | rpush |
字典HashMap | hash | @hash | hset |
set | set | @set | sadd |
zset | 跳表,类似sortedset | @sorted_set | zadd |
bitmap | 位图 | setbit |
位图最大的优点就是节省内存。取值范围最大是 2 32 2^{32} 232,即512MB。
127.0.0.1:6379> setbit max 4294967295 1
(integer) 0
(2.44s)
help @<category>
按种类展示命令原语.
@generic, @list, @set,
@sorted_set,
@hash, @pubsub, @transactions,
@connection, @server, @scripting, @hyperloglog
还可以直接查询某个命令的帮助文档如:help sadd
下面创建一个简单的主题carevent
,通过redis-cli实现。
创建一个主题carevent
:
127.0.0.1:6379> publish carevent "GTR 5 is coming"
(integer) 0
监听一个主题(新开一个终端):
127.0.0.1:6379> subscribe carevent
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "carevent"
3) (integer) 1
1) "message"
2) "carevent"
3) "GTR 5 is coming 4"
可以观察到其基本的消息格式为:
消息类型 | topic | 消息体 |
---|---|---|
subscribe | topic名 | 当前订阅的主题数量 |
message | topic名 | 消息内容 |
unsubscribe | topic名 | 当前订阅的主题数量 |
注意的一点是:
订阅一个topic后,会从订阅前最后一个消息开始(不包含最后一个消息),开始接收消息。
还有另一种格式,即按照topic名字进行模式匹配,订阅匹配到的主题:
127.0.0.1:6379> psubscribe carevent*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "carevent*"
3) (integer) 1
1) "pmessage"
2) "carevent*"
3) "carevent2"
4) "hello"
参考:Using pipelining to speedup Redis queries
这个的使用场景是一次客户端发送很多条命令。
一般情况下,用户端发送一条命令要经过,发送命令->网络延迟->排队->处理->返回->网络延迟->读取执行结果,这里耗费的时间称为RTT。多条命令发送类似批处理,可以减少系统调用和网络通信的开销。
redis的回收是分成两种模式,主动和被动,可以参考:EXPIRE key seconds。
Redis维持着一个过期键组成的集合,会周期性的随机抽取键,查看是否key是否过期,过期则会删除其所占的内存空间。如果过期键占全部样本超过25%,则会立即开始下个周期。
slave不会淘汰过期键,等待master节点的增量日志。
key被访问,如果过期了,redis会将其内存空间删除。