redis 面试频点

redis内存淘汰机制:

redis官方提供的conf中6种过期策略的具体方式。redis中默认的过期策略是volatile-lru。设置方式 config set maxmemory-policy volatile-lru

1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。

2)allkey-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。

3)allkeys-random:当内存不足以容纳写入数据时,在键空间中,随机移除某个key。

4)volatile-lru : 当内存不足以容纳写入新数据时,在设置了过期时间的键空间中,移除最近最少使用的key。

5)volatile-random:当内存不足以容纳写入新数据时,在设置了过期时间的键空间中,随意移除某个key

6)volatile-ttl:当内存不足以容纳写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

为什么使用redis?

1.性能:我们碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样后面的请求就去缓存中读取,使得请求能够迅速的进行响应。

2. 并发:在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,需要redis做一个缓冲操作,让请求先访问到redis,而不是直接访问数据库。

redis数据类型,以及每种数据类型的使用场景?

1.string,最常规的set/get操作,value可以是string也可以是数字。一般做一些复杂的计数功能的缓存。

2. hash 这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候,就是用这个数据结构存储用户信息,以cookieid作为key, 设置30分钟为缓存过期时间,能很好的模拟出类似的session的效果。

3. list。 使用list数据结构,可以做简单的消息队列的功能。另外还可以利用lrange,做基于redis的分页功能。

4. set 因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。

5. sorted set : 多了一个权重参数搜core,集合中的元素按照score进行排列。可以做排行榜的应用,取top N操作。

redis是什么?

redis是一个开源的、使用c语言编写的、支持网络交互的、可基于内存也可以持久化的key-value数据库

redis持久化的两种方式:RDB(redis database)和AOF(Append Only File)

RDB:简而言之,就是在不同的时间点, 将redis存储的数据生成快照并存储到磁盘等介质上。

AOF:将redis执行过的所有指令记录下来,在下次redis重新启动时,只要把这些指令从前到后再重复执行一遍,就可以实现数据恢复。

redis更新缓存策略:

1.缓存失效:客户端请求数据先从缓存中查询,如果没有再查询数据库,最后将数据放入到缓存。

2.缓存命中:客户端从缓存中直接取到数据,返回结果

3.缓存更新:客户端写入数据到数据库,成功之后,让缓存失效(下次请求时从缓存中拿不到,则查询数据库, 再放入缓存)

为什么不采取更新后删除缓存策略?

防止并发写操作导致脏数据。

为什么不删除缓存后再更新数据库?

两个并发请求,一个读操作,一个写操作,先删除缓存, 读操作【旧数据】后将旧数据写入缓存,写操作(更新数据)后也不会更新缓存,导致脏数据一直存在。

猜你喜欢

转载自blog.csdn.net/qq_29869043/article/details/82860723