线上的hash策略配置为 fnv1a_64
路由策略简述:对key hash取值后,比上主分片数量取余,即model=key_hash%master_sharding_nums,
model数值就是既要路由到的主分片的下标
对于lua脚本中key,是按脚本的第一个参数作为key来路由的,所以如果第一个参数一直不变,则通过lua创建的key都会被路由
到同一个分片中
lua 测试脚本
脚本中的key1是hash类型,key2是string类型,测试key2通过lua和不通过lua路由到的分片是否相同
if redis.call("hsetnx", KEYS[1], ARGV[1], 1) == 0 then
local h1= redis.call("hget", KEYS[1], ARGV[1])
else
local h2="hset ok"
end
if redis.call("setnx", KEYS[2], ARGV[2]) == 0 then
local s1= redis.call("get", KEYS[2])
return s1
else
local s2="set ok"
return s2
end
方法1 load
脚本是通过load进行路由的,所以想要成功调用lua脚本,有两种方法
- 每个redis分片都load一遍脚本
- lua脚本的第一个参数为load
以下是测试命令
$ redis-cli -p