...

Python自动化测试面试题-Redis篇

Redis有哪几种数据类型

  1. 字符串String
  2. 列表List
  3. 集合Set
  4. 有序集合ZSet
  5. 哈希

Redis怎么获取值

  • GET
  • GETRANGE
  • MGET
  • GETSET

用过哪些缓存,大面积Key失效称作什么?

用过Redis、Memcache,大面积Key失效称作 缓存雪崩

什么是缓存雪崩、缓存击穿及缓存穿透?如何应对?

  • 缓存雪崩:大面积Key失效导致数据库压力剧增,应对方法
    • Key失效时间设置随机值,防止同时失效
    • 缓存指向分布式数据库,以分担数据库压力
    • 热点数据设置为用不过期
  • 缓存击穿:缓存无,数据库有。高并发访问下缓存失效导致数据库压力剧增,应对方法
    • 热点数据设置为用不过期
    • 使用互斥锁对数据库访问限流
  • 缓存穿透:缓存无,数据库无。如非法访问。
    • 对接口增加校验,拦截非法数据
    • 对无值对Key缓存null值

Redis的应用场景

  1. 缓存-热数据
  2. 计数器incrby
  3. 队列
  4. 位操作 setbit getbit bitcount
  5. 分布式锁与单线程机制 秒杀
  6. 最新列表 list
  7. 排行榜 zset

Redis如何应将业务操作转为原子性操作

在Redis中,可以使用事务(Transaction)和乐观锁(Optimistic Locking)等机制将业务操作转化为原子性操作。

事务(Transaction):Redis的事务机制允许将多个命令打包成一个原子性操作。通过使用MULTI、EXEC和DISCARD等命令,可以将多个命令放入一个事务中,并在EXEC命令执行时一次性提交。如果在事务执行期间出现错误,可以使用DISCARD命令取消事务。事务可以保证在执行期间其他客户端不会干扰,但不提供隔离级别和回滚功能。

乐观锁(Optimistic Locking):乐观锁是一种基于版本号或时间戳的并发控制机制。在Redis中,可以使用WATCH、GET、MULTI、EXEC和UNWATCH等命令实现乐观锁。通过在事务执行前使用WATCH命令监视某个键,然后在执行事务前检查键的值是否发生变化,如果没有变化,则执行事务。如果键的值发生变化,表示其他客户端已经修改了该键,可以选择重试或放弃操作。

使用事务和乐观锁可以将多个Redis命令组合成一个原子性操作,确保操作的一致性和完整性。但需要注意的是,Redis的事务机制并不提供隔离级别和回滚功能,而乐观锁需要手动检查和处理冲突。因此,在使用这些机制时,需要根据具体的业务需求和并发情况进行合理的设计和处理。

posted @ 2020-04-10 23:04  韩志超  阅读(1359)  评论(0编辑  收藏  举报