redis的keys *** 作

redis的keys *** 作,第1张

作用: 获取所有满足条件的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----------


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11437864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存