一、redis的基本数据结构及使用
redis 结构都为key value形式 其中key都为 String value 有String、hash、list、 set、zset
String可以作为寻常是值存储
hash可以作为对象的存储
list适用于列表类型的先进先出类型数据处理
set可以用于点赞业务的点赞、查询、高亮等也可以作为抽奖可以做不重复和重复中奖
zset可以用于日销量排行
二、redis单线程速度快的原因
1、redis基于内存存储、速度比原有的硬盘处理快
2、redis单线程多路复用不存在cpu的上线文切换
三、redis的持久化机制
1、RDB持久化用二进制进行存储恢复快。但是持久化机制是基于隔一段时间执行持久化(如十秒)可能造成数据丢失多不安全
2、AOF持久化基于文本形式存储。修改命令一致性就会直接持久化、速度慢、安全。
四、redis锁的原理及和redisson的区别
1、使用redis锁的原因,分布式架构下,nginx负载均衡到不同不服务原sync锁无法保证锁的唯一性。
2、redis锁 setnx 拿到锁则执行 没拿到就不执行。流程 1、加锁 2、判断锁是否加成功3、成功则执行业务代码4、最终删除锁存在的问题 1.业务逻辑执行失败时导致锁一直不释放、2.由于程序执行卡顿导致线程1删除时删除的是线程2的锁导致线程商品超单售卖、解决方法(锁延期、redission实现)
3、区别 redission加锁方法将redis的setnx封装通过rua脚本进行锁续命,中间有定时线程扫描锁是否被释放,没有释放则进行锁续命默认为30秒
3、区别 redission加锁的时候会执行尝试加锁方法方法返回锁剩余时间或null,null为加锁成功、加锁失败则执行等待方法会让出cpu等待返回的时间再执行加锁方法,同步还有一个相当于mq的队列监听方法监听锁是否被释放被释放则唤醒所有等待队列进行重新加锁。 redission中还有一个定时任务进行锁续命,防止锁超时使用线程池来执行循环续命。
五、过期key删除策略
1、主动删除(定期扫描key是否过期,过期则删除)、2被动删除(getkey时判断时间是否过期、过期则删除)
删除算法 1、lru根据最近一次查询时间,时间久的删除。2、lfu根据最近使用频率(评率低的删除)