一个python类,用于使用redis或其他键值存储,并缓存读取繁重工作负载的值。
redis-pubsub-dict的Python项目详细描述
使用redis或其他键值存储的python类,作为 字典和本地缓存值,以便读取繁重的工作负载。 深受pylru的启发。
用法
其思想是删除或更新 PubSubRedisDict或PubSubCacheManager将更新匹配 所有PubSubCacheManager实例中的缓存键。 PubSubCacheManager因此将维护最近使用的缓存 使用lru或直接使用dict()的键。这将减少 缓存的任何读取的往返延迟和网络开销 钥匙。
RedisDict和RedisDict应该与 redis.StrictRedis或rediscluster.StrictRedisCluster。使用 prefix用于管理redis密钥命名空间。
重新发现
就像一本普通的字典,但是是联网的。初始化不需要 dictionary或iterable暂时需要连接和命名空间 信息。
rc=StrictRedisCluster(startup_nodes=[{"host":"redis","port":"6379"}])reddict=RedisDict(rc,'namespace')# you can setreddict[1]=1reddict[2]=[1,2,3]reddict['hello']='world'reddict[('complex',1)]={'I':{'Am':{'Quite':['a','complex',{'object':{}}]}}}# get somewhere elsereddict[1]reddict['1']# note its the same as reddict[1]reddict[('complex',1)]reddict["('complex', 1)"]# the key is str(('complex',1))# deletedelreddict[1]# .. ect
pubsubredisdict
类似于RedisDict,但会将密钥更新和删除事件发布到 <namespace>/[update|delete]频道。
redpubsub=PubSubRedisDict(rc,'namespace')# ect as before
公共子化学经理
类似于pylry.WriteThroughCacheManager,但从 当它从 <namespace>/[update|delete]频道。
cache=pylru.lrucache(10)# maybe more than 10redstore=PubSubRedisDict(rc,'namespace')redcache=PubSubCacheManager(redstore,cache)# ect as before# see the cacheprintdict(redcache.cache)
进一步使用
您可以将RedisDict或PubSubRedisDict连接到 pylru.WriteBackCacheManager获取支持redis的字典 仅在“刷新”时或项目从^{tt5}弹出时写入redis$ 用于写密集型工作负载。不过,还需要做更多的工作 增加了pubsub机制,因为有困难的情况需要考虑, 比如当缓存变脏时会发生什么 存储密钥已更新?
限制
- 所有键都是字符串。
- msgpack用于封送对象到redis,因此msgpack 对象限制适用。尽管你可以给模块打补丁 loads和dumps方法(如果您愿意)。
- publish将发布到所有正在使用的字典实例,其中 没有分区,所以写和更新是昂贵的。你可以来 使用分区策略来改进这一点。
- 发表的文章最终以被关注的现金收场。有可能 在客户端发布更改和密钥 正在另一个客户端缓存中更新。