我正在学习redis / memcache和redis显然是更受欢迎的选择。我的问题是支持的数据类型。在我的公司,我们使用memcached构建的memcashier库。我们存储临时用户数据,当他们在memcache中进行购买时。我们可以轻松地更新此对象,因为事情已添加到购物车或有关用户的更多信息。这看起来与redis中的哈希功能相同。我不明白这只是一种基本的字符串数据类型,以及它不如哈希值那么强大。
答案 0 :(得分:1)
如果您正在使用字符串,那很好 - 但任何更改都涉及将数据加载到您的应用程序,解析它,修改它,并将其序列化回Redis / Memcache。
这有两个问题:它是缓慢而非原子的。您可以让两台服务器修改同一对象,使其处于不一致状态 - 例如购物车中的双重或缺失项目。而且,它很慢。
使用Redis哈希键,您可以原子地修改对象的特定字段,而无需将整个对象加载到内存中。而不是阅读,解析,修改,保存 - 您只需更新。
此外,Redis有许多数据结构可以创建具有不同属性的非常灵活的数据存储,而Memcache只能存储字符串。
BTW Redis有一个模块,允许您像对待字符串一样存储JSON对象,并直接和原子地操作它们而不将它们带到客户端。有关详细信息,请参阅Rejson.io。
答案 1 :(得分:0)
Memcached不支持复杂的数据结构
在redis中,您有Lists,Sets,SortedSets,HashTables等。 上面提到的每个数据结构都支持原子地突变其一个或多个元素,而不会替换整个数据结构/值。
另一方面,Memcached是一个简单的键值存储 - 这意味着在复杂对象中涉及属性更改的每个操作都是读 - 修改 - 写。如果你只是盲目地替换对象中的字段,那么你就会面临竞争条件和操作原子性问题(你可以通过使用CAS来解决)如果图书馆抽象出这种复杂性,那很好 - 但它的效率仍然低于仅改变相关领域
此答案仅与您的用例有关。 Redis在memcached上拥有许多其他优点,这与这个问题无关。