Memcached 可扩展对象的键值存储

Memcached 可扩展对象的键值存储,memcached,redis,key-value-store,Memcached,Redis,Key Value Store,这是一个关于KV stores的视频,整个前提是推广一种基于列的样式,用于将对象的属性存储在单独的键下,而不是序列化对象并将其存储在单个键下 (这个问题不是redis特有的,而是KV商店的一般风格和最佳实践。) redis鼓励使用基于列的样式,将对象中的属性存储为单独的键,而不是像“person”这样的blob R.set("U:123:firstname","Billy") R.set("U:123:surname","Newport") ... 我很好奇这是否是最佳实践,以及人们是否采取了

这是一个关于KV stores的视频,整个前提是推广一种基于列的样式,用于将对象的属性存储在单独的键下,而不是序列化对象并将其存储在单个键下

(这个问题不是redis特有的,而是KV商店的一般风格和最佳实践。)

redis鼓励使用基于列的样式,将对象中的属性存储为单独的键,而不是像“person”这样的blob

R.set("U:123:firstname","Billy")
R.set("U:123:surname","Newport")
...
我很好奇这是否是最佳实践,以及人们是否采取了不同的方法

  • 例如,您可以在单个键下“pickle”对象。这具有在单个请求中获取或设置的优点

  • 或者一个人可以是一个列表,其中第一项是字段名索引或类似的内容

这让我思考——我想要一个分层的密钥存储,例如

R.set(["U:123","firstname"],"Billy")
R.set(["U:123","surname"],"Newport")
R.get(["U:123"]) returns [("firstname","Billy"),("surname","Newport")]
然后要添加事务,请执行以下操作:

with(R.get(["U:132"]) as user):
  user.set("firstname","Paul")
  user.set("lastname","Simon")
从伸缩性的角度来看,get和set的批处理很重要


是否有支持此功能或其他适用方法的密钥存储?

通过使用额外的集合跟踪对象的各个成员,您可以在Redis中获得类似的行为

SET U:123:firstname Billy
SADD U:123:members firstname
SET U:123:surname Cobin
SADD U:123:members surname

GET U:123:firstname => Billy
GET U:123:firstname => Cobin
SORT U:123:members GET U:123:* -> [Billy, Cobin]
or
SMEMBERS U:123:members -> [firstname, surname]
MGET U:123:firstname U:123:firstname
不是完美的搭配,但在很多情况下都足够好。关于如何在Redis中使用此模式,存在一个问题