作用: 获取所有满足条件的key
用法:
tips: 生产环境上,keys须谨慎使用,如果key很多,会阻塞其它 *** 作
作用: 获取keys的总数
作用: 检查key是否存在
返回值: 0/1 不存在/存在
作用: 删除key
返回值: 成功删除的条数
作用: 获取key的类型
返回值: string/hash/list/set/zset/none
tips: type 一个不存在的key就是 none
作用: 设置key在多少秒后过期
返回值: 0/1 成功/失败
tips : 除此之外,还能设置毫秒级/时间戳。如:
作用: 查看key的过期时间
返回值: 剩余秒数/-1(永不过期)/-2(已经不存在)
作用: 去除key的过期时间
返回值: 0/1
1、使用idea创建spring boot项目。
2、添加pring-boot-starter-data-redis依赖。
3、添加一个测试接口。
4、启动项目,查看redis *** 作结果,发现key为不熟悉编码。
5、添加配置文件,主要代码redisTemplate.setKeySerializer(new StringRedisSerializer())。
6、重启项目,重新调用接口,再次查看redis结果。
注意事项:
可以使用方法获取对象中的key和value,相应的在d3.js中,也有这些方法可以获取对象的key和value。
原理很简单,set 一个 锁-key,如果成功则说明加锁成功,反之则失败。
为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下几个条件:
基于以上条件,采用set扩展参数,保证原子性 *** 作: SET lock-key "lock-client" EX 10086 NX
lock-key "lock-client" 指定 加锁client,解锁时用于判断。
EX 10010 指定过期时间
NX 只在键不存在时,才对键进行设置 *** 作。效果等同于 SETNX 命令。
只不过早期版本redis不支持set的扩展参数,这就需要用到 lua 脚本了 。
加锁可以在高版本借助set命令实现原子 *** 作,但解锁就不可以了,依然得用到lua脚本。
Redis在2.6版本推出了 lua 脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。使用脚本的好处如下:
需要在获得 lock-key 后判断加锁对象是否为当前client,是,则解锁。Lua 脚本如下:
if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end
执行方式:eval;
eval 参数列表: eval lua-script key-num [key1 key2 key3 ....] [value1 value2 value3 ....] ,参数解析:
eval执行示例: eval "redis.call('set',KEYS[1],ARGV[1])" 1 lua-key lua-val ;
完整解锁执行脚本:
eval "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 lock-key client-val
----------End----------
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)