MST

星途 面试题库

面试题:Redis命令多态在缓存更新策略中的运用

在实际开发中,我们经常使用Redis作为缓存。假设你正在开发一个电商系统,商品数据缓存在Redis中。当商品信息发生变化时,需要更新缓存。请阐述如何利用Redis命令多态来设计一种合理的缓存更新策略,并举例说明可能用到的Redis命令及其多态形式。
20.3万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

缓存更新策略设计

  1. 先更新数据库,再删除缓存:这种策略相对简单直观。在商品信息发生变化时,首先更新数据库中的商品数据,确保数据的持久性和一致性。然后,使用Redis命令删除对应的缓存数据。当下次请求该商品数据时,由于缓存中不存在,系统会从数据库中读取并重新缓存。
  2. 先更新数据库,再更新缓存:此策略在更新数据库后,直接使用新的数据更新Redis缓存。这种方式能保持缓存数据的实时性,但在高并发场景下可能会出现数据不一致问题,比如更新缓存操作还未完成,另一个请求读取到了旧的缓存数据。

可能用到的Redis命令及其多态形式

  1. 删除缓存 - DEL 命令
    • 基本形式DEL key,用于删除指定的键值对。例如,假设商品在Redis中的键为product:123(其中123是商品ID),当商品信息更新后,可以使用DEL product:123删除该商品的缓存。
    • 多态形式:在一些编程语言的Redis客户端中,可能会有不同的方法来调用这个命令。比如在Python的redis - py库中,可以这样使用:
import redis
r = redis.Redis(host='localhost', port=6379, db = 0)
r.delete('product:123')
  1. 更新缓存 - SET 命令
    • 基本形式SET key value [EX seconds] [PX milliseconds] [NX|XX]。用于设置指定键的值。例如,当商品信息更新后,将新的商品数据序列化为JSON字符串new_product_json,然后使用SET product:123 new_product_json EX 3600(假设设置缓存过期时间为1小时)来更新缓存。
    • 多态形式:在Java中使用Jedis库时,代码如下:
import redis.clients.jedis.Jedis;
public class RedisExample {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        String newProductJson = "{...}";// 新的商品JSON数据
        jedis.setex("product:123", 3600, newProductJson);
    }
}

其中setex方法是SET命令的一种多态形式,它在设置值的同时可以指定过期时间。