redis客户端缓存实验

175 阅读1分钟

准备

下载安装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消息。