使用redis存储和修改缓存的对象

时间:2018-03-27 12:20:38

标签: php database object caching redis

我正在尝试使用redis缓存php对象(代表数据库记录)。

我需要偶尔编辑许多对象的一个​​字段,(对象代表产品,数量字段应经常批量更新)。

我在互联网上遇到了不同的方法,比如哈希表和序列化的json。

对于这种情况,这是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

是的,根据我的经验,我会明确地使用由productId索引的哈希值和存储为JSON对象的产品数据。不要为每个项目使用一个密钥,因为你可以解决内存问题。看看Redis文档中的这些链接,了解为什么最好使用哈希而不是键用于您的用例:

https://redis.io/topics/memory-optimization#use-hashes-when-possible https://redis.io/topics/memory-optimization#using-hashes-to-abstract-a-very-memory-efficient-plain-key-value-store-on-top-of-redis

除了要选择的结构之外,我认为定义您是要存储完整的产品对象还是仅存储quantity字段也很重要。我猜你在一些数据库中有你的产品,你想要移动到缓存,比如Redis,数量的值,以提高性能,速度和避免对数据库的读取操作。可能我错了,但如果是这样的话,我只会创建一个由productId索引的哈希值,并将quantity字段作为值。无论如何,如果你还需要保留缓存产品对象中的其他一些字段,我什么都不说。

另一个需要考虑的主题可能不是你的问题的一部分是你如何用Redis哈希更新这个数量值,我猜你每次销售产品时都会减少Redis的数量,但是可能会发生这样的情况:由于用户访问产品页面并且他/她决定购买产品,因此产品数量可能为零。因此,您应首先从Redis动态更新Web应用程序中的产品计数器,以便让您的用户了解情况,并在最终确定购买之前检查此产品的数量,但是针对数据库。我的意思是即使使用Redis,真相的来源就是你的数据库,它可能存在Redis和你的数据库之间的一些同步问题

我可能已经猜到了很多事情...... :)