在Redis中是否可以将TTL(生存时间)设置为不是针对特定键,而是针对某个成员设置? 我正在使用由Redis文档提出的标签结构 – 数据是简单的键值对,标签是包含与每个标签对应的键的集合,例如 > SETEX id:id_1 100 'Lorem ipsum' OK > SADD tag:tag_1 id:id_1 (integer) 1 密钥id:id_1将按预期过期,但我看不到从tag:tag_1集合中删除相应成员的有效方法。 我想到的一个方法是使用包含脚本的cron作业,该脚本会定期从集合中删除过期的密钥 – 将所有标签名称添加到另一个集合,然后迭代所有标签,然后遍历每个标签对应的所有id,并检查是否相应的密钥存在 – 如果没有,则调用SREM 。 我不认为这将是一个有效的方法,我可能希望保持标签尽可能干净,因为这些集合的大小可能会影响多个标签( SINTER )的search性能。 有没有更“内在”的方式?
是否有可能在Redis中创build名称空间? 从我发现,所有的全局命令(计数,全部删除)工作在所有的对象上。 有没有办法创build子空间,这些命令将在上下文中受到限制? 我不想为此设置不同的Redis服务器。 我假设答案是“否”,并想知道为什么不实施,因为它似乎是一个有用的function,没有太多的开销。
假设我在13:30 20 Feb 2020在redis中这样做, > set foo "bar spam" OK 我想获得foo的创造时间。 有没有像 > gettime foo 13:30 20 Feb 2020 ?
我一直在试图得到MurmurHash的高层次的理解。 我已经阅读了一个基本的描述,但还没有find一个很好的解释,何时使用它,为什么。 我知道它非常快,但想知道更多。 我问了一个关于如何将UUID放入Redis bitset的相关问题 ,并且有人build议使用MurmurHash。 它的工作原理,但我想了解风险/收益。
Aerospike是一个关键值内存操作NoSQL数据库,具有支持复杂对象且易于扩展的ACID属性。 但是我已经使用了完全一样的东西。 Redis也是一个关键价值的内存(但持久化到磁盘)的NoSQL数据库。 它也支持不同的复杂对象。 但与Aerospike相比,Redis已经使用了很多时间,已经有了一个活跃的社区,并开发了大量的项目。 那么aerospike和其他非sql键值数据库(如redis)有什么区别。 有一个更适合于aerospike的地方吗? PS我正在寻找人们在现实世界中使用这些数据库中的至less一个(最好是两个)的答案,并有实际的生活经验(而不是从官方网站复制粘贴)。
任何人都知道redis复制和redis分片之间的区别? 他们用什么? Redis将数据存储在内存中,这如何影响复制/分片? 是否可以同时使用它们? 谢谢!
hmset函数可以设置每个字段的值,但是我发现如果值本身是一个复杂的结构化对象,则从hget返回的值是一个序列化的string,而不是原始对象 例如 images= [{'type':'big', 'url':'….'}, {'type':'big', 'url':'….'}, {'type':'big', 'url':'….'}] redis = Redis() redis.hset('photo:1', 'images', images) i = redis.hget('photo:1', 'images') print type(i) 我的types是一个string,而不是一个Python对象,有没有什么办法来解决这个问题,除了手动parsing每个字段?
我一直在使用Redis Pub / Sub作为RabbitMQ的替代品。 根据我的理解,Redis的pub / sub持有与每个订户的连接,如果连接终止,所有未来的消息都将丢失并丢弃。 一个可能的解决scheme是使用一个列表(和阻塞等待)来存储所有的消息和pub / sub作为一个通知机制。 我认为这是最让我感到满意的方式,但我仍然对失败案例有所顾虑。 当一个用户死了,又回到了在线状态,应该怎么处理所有未决的消息呢? 当系统出现格式错误的消息时,你如何处理这些exception? DeadLetter队列? 是否有执行重试策略的标准做法?
为什么Redis使用整数数据库而不是string? 保持一个小的内部数据结构将string映射到“实际”整数似乎是微不足道的。
有什么工具可以用来找出Redis正在占用多less内存?