准备
下载安装redis并允许redis
wget https://github.com/antirez/redis/archive/6.0.1.tar.gz
tar zxf 6.0.1.tar.gz
cd redis-6.0.1
make
./src/redis-server redis.conf
普通模式实验
链接redis
telnet 127.0.0.1 6379
得到
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
输入
hello 3
得到
%7
$6
server
$5
redis
$7
version
$5
6.0.1
$5
proto
:3
$2
id
:4
$4
mode
$10
standalone
$4
role
$6
master
$7
modules
*0
设置初始值
set hello world
开启tracking
client tracking on
取值
get hello
更新值
set hello world2
得到
>2
$10
invalidate
*1
$5
hello
+OK
再次更新值
set hello world
得到
+OK
所以tracking对于一次get,只有一次invalidate通知
广播模式
开启tracking
client tracking on bcast
设置值
set hello world2
得到
+OK
>2
$10
invalidate
*1
$5
hello
所以不需要进行get,就可以收到invalidate通知 如果需要过滤非hello前缀的key
client tracking on bcast prefix hello
转发模式
第一个终端
telnet 127.0.0.1 6379
client id
得到(id视情况不同)
:12
第二个终端
telnet 127.0.0.1 6379
client id
得到(id视情况不同)
:13
第一个终端
subscribe _redis_:invalidate
第二个终端
client tracking on bcast redirect 12
set hello world2
第一个终端中得到
*3
$7
message
$20
__redis__:invalidate
*1
$5
hello
OPTIN和OPTOUT
开启OPTIN后(client tracking on optin),只有显示开启caching的(client caching yes)才会有invalidate通知
client tracking on optin
client caching yes
get hello
get hello2
得到
>2
$10
invalidate
*1
$5
hello
+OK
OPTOUT 相反,是下一个get不被tracking 当然,OPTIN和OPTOUT针对的是普通模式
NOLOOP
NOLOOP可以避免更新的客户端接受invalidate通知
tracking-table-max-keys
有新的key被tracking时,如果tracking的key数量大于tracking-table-max-keys,则会随机删除tracking的key,然后向响应的客户端发送invalidate消息。