Redis Test


Redis管什么都叫“key”,因为是键值数据库。

基础数据结构

对应表

redis 数据结构 command 常用
string string @string set
list 双向链表 @list rpush
字典HashMap hash @hash hset
set set @set sadd
zset 跳表,类似sortedset @sorted_set zadd
bitmap 位图 setbit

笔记

位图

位图最大的优点就是节省内存。取值范围最大是2322^{32},即512MB。

127.0.0.1:6379> setbit max 4294967295 1
(integer) 0
(2.44s)
使用场景
  1. 活跃用户统计
    用户id当索引,十亿个用户才一百多M。

Redis-cli

帮助命令

help @<category> 按种类展示命令原语.

@generic, @list, @set, 
@sorted_set, 
@hash, @pubsub, @transactions, 
@connection, @server, @scripting, @hyperloglog

还可以直接查询某个命令的帮助文档如:help sadd

Pub/Sub测试

简单的发布订阅

下面创建一个简单的主题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"

Pipelining

参考:Using pipelining to speedup Redis queries

这个的使用场景是一次客户端发送很多条命令。

一般情况下,用户端发送一条命令要经过,发送命令->网络延迟->排队->处理->返回->网络延迟->读取执行结果,这里耗费的时间称为RTT。多条命令发送类似批处理,可以减少系统调用和网络通信的开销。

过期键的回收

redis的回收是分成两种模式,主动和被动,可以参考:EXPIRE key seconds

主动方式

Redis维持着一个过期键组成的集合,会周期性的随机抽取键,查看是否key是否过期,过期则会删除其所占的内存空间。如果过期键占全部样本超过25%,则会立即开始下个周期。

主从模式下

slave不会淘汰过期键,等待master节点的增量日志。

被动方式

key被访问,如果过期了,redis会将其内存空间删除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章