文章目录
- Redis数据类型
- Redis基本数据类型的使用和使用场景
- String
- hash
- list
- set
- zset
- 标题为什么使用Redis?
- 标题为什么Redis的性能高?
- 标题Redis为什么使用单线程?
- Redis过期策略
- Redis淘汰策略
- Redis缓存穿透
- Redis缓存击穿
- Redis缓存雪崩
- Redis分布式锁
- 单Redis实例实现分布式锁
- 多Redis实例实现分布式锁
✅作者简介:我是18shou,一名即将秋招的java实习生
系列专栏:牛客面经专栏
推荐一款八股、面经、模拟面试、刷题神器 超级无敌之牛客
耗时数小时从牛客整理的面经以及笔记
Redis数据类型
数据类型 :最大存储数据量
key:512M
string:512M
hash:2^32-1
list:2^32-1
set:2^32-1
sorted setbitmap:512M
hyperloglog:12K
Redis基本数据类型的使用和使用场景
String
String:set(添加键值对),get(获取键值对),decr(自减1),incr(自增1),mget(同时获取一个或多个value)
适合用于高频访问的信息,比如书一个大V的粉丝数量,微博数量等等,可以用Redis的String来存放。如博客访问次数、网站访问量。
hash
hash: hget,hset,hgetall 可以应用在电商网站购物车的设计,用户就是一个key,商品是一个field,数量为value。
list
list:
lpush(从左边插入一个或多个值),rpush(从右边插入一个或多个值),rpop(从右边吐出一个值),lrange(key,start,stop)(按照索引下标获得元素从左到右)
可以运用在微信朋友圈点赞,比如说要求按照点赞的顺序来显示好友信息,如果取消点赞,就移除点赞列表。微博中我的关注列表
set
set: sadd(添加一个或多个值), spop (随机从集合中吐出一个值),
smembers(取出对应键所有值),sunion(sunion:sunion key1 key2 取key1和key2的并集)
假如一个公司里面有很多的员工,在内部的OA系统中就具有700多个角色,3000多个业务操作,20000多种数据,那么如何快速进行业务操作的相关校验呢” />
A加锁->A阻塞->因超时释放锁 ->B加锁->A恢复->释放锁
多Redis实例实现分布式锁
Redlock算法,该算法有现成的实现,其Java版本的厍为Redisson。
1.获取当前Unix时间,以毫秒为单位。
2.依次尝试从N个实例,使用相同的key和随机值获取锁,并设置响应超时时间。如果服务器没有在
规定时间内响应,客户端应该尽快尝试另外一个Redis实例。
3.客户端使用当前时间减去开始获取锁的时间,得到获取锁使用的时间。当且仅当大多数的Redis节
点都取到锁,并且使用的时间小于锁失效时间时,锁才算取得成功。
4.如果取到了锁,key的真正有效时间等于有效时间减去获取锁使用的时间。5.如果获取锁失败,客户端应该在所有的Redis实例上进行解锁。
推荐超级无敌之牛客