有关Redis

1.redis数据库,数据存储在内存,因此读写快,广泛应用于缓存方向,此外,redis也经常被用来做分布式锁。

Redis 作为一个内存数据库:

性能优秀,数据在内存中,读写速度非常快,支持并发 10W QPS(每秒查询率)。单进程单线程,是线程安全的,采用 IO 多路复用机制。
丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
支持数据持久化。可以将内存中数据保存在磁盘中,重启时加载。主从复制,哨兵,高可用。可以用作分布式锁。可以作为消息中间件使用,支持发布订阅。

2.数据类型:

redis是一种高级的key:value存储系统,其中value支持五种数据类型:

      1.字符串(strings)————————————————————————————使用场景:缓存,计数器,共享Session,限速...
      2.字符串列表(lists)——>链表
      3.字符串集合(sets)——>无序集合—————————————————兴趣标签之类的
      4.有序字符串集合(sorted sets)——>有序集合——————排行榜...
      5.哈希(hashes)

3.常见功能;

      缓存
      分布式锁
      数据持久化
      支持事务
      支持消息队列

4.Redis的优缺点

优点:

1.读写非常的快,提高网站的访问速度,Redis能读的速度是110000次/s,写的速度是81000次/s。强悍的一比。

2,持AOF和RDB两种持久化方式。

3,支持较多的数据结构类型,有String、hash、set、zset等等。

4,支持主从复制,主机可以自动的将数据同步到从机,从而进行读写分离。

5,支持AOF和RDB的持久化方式。

缺点:

Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

5.redis持久化

redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)

RDB: 在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上,可以进行备份和全量复制,但无法做到实时的持久化,适合大规模的数据恢复。

AOF: 以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件,以此达到记录数据库状态的目的。

6.Redis缓存

     1.pom文件添加依赖
     2.yml配置
     3.实体类的配置

7.1.内存淘汰算法

Redis有六种策略(默认的策略是volatile-lru。)

redis中当内存超过限制时,按照配置的策略,淘汰掉相应的key-value,使得内存可以继续留有足够的空间保存新的数据。redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

(1)volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
(2)volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
(3)volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
(4)allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
(5)allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
(6)no-enviction:禁止淘汰数据

LRU算法(最近最久未使用)
LFU算法(最近最少使用)

置换策略是如何工作的:

1)客户端执行一条新命令,导致数据库需要增加数据(比如set key value)
2)Redis会检查内存使用,如果内存使用超过maxmemory,就会按照置换策略删除一些key
3)新的命令执行成功

缓存异常
缓存雪崩

缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。

解决方案

缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。
给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。

缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。

解决方案

1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-        null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
3. 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力

面试题:

1

2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值