redis怎么用的-redission怎么用(6-11-32)
更新时间:2024-09-20 分类:Redis 浏览量:2
Redis本文目录一览:
- 1、基于Redission使用Redis的Stream
- 2、大厂面试题详解:如何用Redis实现分布式锁?
基于Redission使用Redis的Stream
1、这里,有个group名字叫testGroup31,里面有消费者6个,pending代表目前有6个数据被读取了,但没有ack。last_delivered-id代表这个group目前读到哪条消息。
2、创建Stream的名称是 stream-key 创建2个消息,aa和bb 表示从最后一个元素消费,不包括Stream中的最后一个元素,即消费最新的消息。
3、使用XLEN命令来获取一个Stream的条目数量:按范围查询: XRANGE 和 XREVRANGE 要根据范围查询Stream,我们只需要提供两个ID,即start 和 end。返回的区间数据将会包括ID是start和end的元素,因此区间是完全包含的。
4、虽然Redis提供了发布/订阅的功能,但是并不完善,导致基本没有合适的场景能够使用。PubSub缺点:直到Redis0出现之后,出现了Stream这种数据结构,才终于完善了Redis的消息机制 。
5、首先默认的队列监听是自动确认的,但是如出现异常不会自动确认,默认的失败机制是不断重试,这样会影响mq性能。其次可以在配置文件中指定失败重试次数和重试间隔。
6、无序集合可以用整数集合(intset)或者字典实现 Redis的0版本中,放出一个新的数据结构Stream。
大厂面试题详解:如何用Redis实现分布式锁?
直接使用 set(key,value,NX,EX,timeout) 指令,同时设置锁和超时时间。 以上两种方法,使用哪种方式都可以。 释放锁的脚本两种方式都一样,直接调用 Redis 的 del 指令即可。
可以尽量把锁自动过期的时间设的冗余一些。但也不能彻底解决。可以在删除锁的时候先get值,判断值是否是当前线程存的随机值,只有相同才执行删锁的操作;当然也要使用 lua 脚本执行来保证原子性。
如返回1,则该客户端获得锁,把lock.foo的键值设置为时间值表示该键已被锁定,该客户端最后可以通过DEL lock.foo来释放该锁。如返回0,表明该锁已被其他客户端取得,这时我们可以先返回或进行重试等对方完成或等待锁超时。