Python自动化测试面试题-Redis篇
Redis有哪几种数据类型
- 字符串String
- 列表List
- 集合Set
- 有序集合ZSet
- 哈希
Redis怎么获取值
- GET
- GETRANGE
- MGET
- GETSET
用过哪些缓存,大面积Key失效称作什么?
用过Redis、Memcache,大面积Key失效称作 缓存雪崩
什么是缓存雪崩、缓存击穿及缓存穿透?如何应对?
- 缓存雪崩:大面积Key失效导致数据库压力剧增,应对方法
- Key失效时间设置随机值,防止同时失效
- 缓存指向分布式数据库,以分担数据库压力
- 热点数据设置为用不过期
- 缓存击穿:缓存无,数据库有。高并发访问下缓存失效导致数据库压力剧增,应对方法
- 热点数据设置为用不过期
- 使用互斥锁对数据库访问限流
- 缓存穿透:缓存无,数据库无。如非法访问。
- 对接口增加校验,拦截非法数据
- 对无值对Key缓存null值
Redis的应用场景
- 缓存-热数据
- 计数器incrby
- 队列
- 位操作 setbit getbit bitcount
- 分布式锁与单线程机制 秒杀
- 最新列表 list
- 排行榜 zset
Redis如何应将业务操作转为原子性操作
在Redis中,可以使用事务(Transaction)和乐观锁(Optimistic Locking)等机制将业务操作转化为原子性操作。
事务(Transaction):Redis的事务机制允许将多个命令打包成一个原子性操作。通过使用MULTI、EXEC和DISCARD等命令,可以将多个命令放入一个事务中,并在EXEC命令执行时一次性提交。如果在事务执行期间出现错误,可以使用DISCARD命令取消事务。事务可以保证在执行期间其他客户端不会干扰,但不提供隔离级别和回滚功能。
乐观锁(Optimistic Locking):乐观锁是一种基于版本号或时间戳的并发控制机制。在Redis中,可以使用WATCH、GET、MULTI、EXEC和UNWATCH等命令实现乐观锁。通过在事务执行前使用WATCH命令监视某个键,然后在执行事务前检查键的值是否发生变化,如果没有变化,则执行事务。如果键的值发生变化,表示其他客户端已经修改了该键,可以选择重试或放弃操作。
使用事务和乐观锁可以将多个Redis命令组合成一个原子性操作,确保操作的一致性和完整性。但需要注意的是,Redis的事务机制并不提供隔离级别和回滚功能,而乐观锁需要手动检查和处理冲突。因此,在使用这些机制时,需要根据具体的业务需求和并发情况进行合理的设计和处理。