加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – StackExchange Redis – StringSet vs SetAdd和expiries

发布时间:2020-12-15 08:25:00 所属栏目:百科 来源:网络整理
导读:在 StackExchange.Redis中,STRING操作允许设置到期时间,例如: Taskbool StringSetAsync(RedisKey key,RedisValue value,TimeSpan? expiry = null,When when = When.Always,CommandFlags flags = CommandFlags.None); 为什么SET操作没有? Tasklong SetAddAs
在 StackExchange.Redis中,STRING操作允许设置到期时间,例如:
Task<bool> StringSetAsync(
RedisKey key,RedisValue value,TimeSpan? expiry = null,When when = When.Always,CommandFlags flags = CommandFlags.None);

为什么SET操作没有?

Task<long> SetAddAsync(
RedisKey key,RedisValue[] values,CommandFlags flags = CommandFlags.None);

基本上,这就是我想要实现的目标:

给定列表< T>,将项目添加到Redis集合(创建或添加到现有),期限为1小时.

我该怎么做?或者我应该序列化List< T>那么使用StringSet?

我想使用像SREM这样的SET函数,并将单个项添加到现有的SET(而不是重写整个SET),这就是为什么我不想使用STRING.

有什么建议?

解决方法

对于第一个问题(为什么字符串操作在设置操作时没有可选的到期):这只是因为redis操作公开了:SET(特别是EX和PX修饰符)和SETEX是这里的字符串操作允许设置到期时间.设置操作SADD不公开这样的参数.其中一部分可能是为了避免混淆,即到期将适用于元素,而事实上,到期将适用于整个密钥(即整个集合).

那么,你最好的选择是明确设定到期时间;在redis级别,这是通过EXPIRE,EXPIREAT,PEXPIRE或PEXPIREAT;或者在SE.Redis中的IDatabase:KeyExpire或KeyExpireAsync.这必须在集合存在之后完成;如果集合很大并且您要发送多个批次并且想要确保即使在接近结束时窒息也设置了超时,您可能希望在第一批之后发送到期.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读