文章目录

    • 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实例上进行解锁。

推荐超级无敌之牛客