Redis测试场景

180 阅读3分钟

Redis简介

Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存

Redis有这五种基本类型:

  • String(字符串):set key valueget key
  • Hash(哈希):hset key field value 、hget key field
  • List(列表):lpush key value [value ...] 、lrange key start end
  • Set(集合):sadd key element [element ...]smembers key
  • zset(有序集合):zadd key score member [score member ...]zrank key member

image.png

Redis的使用场景

  1. 分布式共享session,登录的token的存储
  2. 时效性要求不高的计算类场景,比如一些预计算,对准确性和实时要求不过高,可以每天计算一次存入缓
  3. 需要用到分布式锁的场景,比如资源扣减等场景
  4. 需要后端接口进行限流保护的,可以使用redis的令牌桶进行一定时间段的请求次数限制。

Redis的过期和内存淘汰策略

1. Reids的过期策略

  • 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
  • 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。节省CPU资源,却对内存非常不友好。
  • 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。

2. Redis的内存淘汰策略

  • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

功能测试角度

  1. 缓存存在,从缓存读取数据
  2. 缓存存在但过期的时候,从db读取,如有则更新到redis
  3. 当redis中不存在时,从db读取返回上层并写入redis,注意有效期的正确性
  4. 当redis和db中都不存在的时候,缓存写入null,设置短暂失效期。
  5. 删除数据的时候,redis和db中的数据一致性

性能测试角度

  1. 超量淘汰机制:结合内存淘汰策略来看
  2. 缓存穿透:构造不存在的数据查询,缓存写入null,设置较短失效时间。
  3. 缓存击穿:避免所有key同一时间失效,大量请求进入db,可以在失效时间设置增加随机数