Redis知识点总结

什么是Redis?简述它的优缺点?

Redis(Remote Dictionary Server)本质上是一个Key-Value类型的基于内存的一种非关系型数据库。整个数据库都是加载到内存中进行操作的。定期通过异步操作把数据库flush到硬盘上进行保存。

  • 高性能:由于redis是基于内存的,所以对数据的处理非常快。
  • 丰富的数据类型:redis支持String、List、Set、Hash、Zset数据类型。
  • redis支持持久化。

正因为redis是基于内存的,所以它会受到物理内存的限制,不能用作海量数据的高性能读写。

Redis和Memcached相比有哪些优势?

  • Memcached所有的值均是字符串,redis支持更为丰富的数据类型。
  • redis的速度比Memcached快。
  • redis可以支持持久化。
  • redis是单线程,并发时串行执行。
  • redis在3.0后提供集群环境。

Redis支持哪几种数据类型?

String、List、Set、Zset、Hash。

Redis有哪几种数据淘汰策略?

当redis内存不足时,会选择数据淘汰策略,分为以下几种:

  • volatile-lru: 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
  • volatile-ttl: 从已设置过期时间的数据集中挑选将要过期的数据。
  • volatile-random: 从已设置的过期时间的数据集中随机挑选数据淘汰。
  • volatile-lfu: 从已设置的过期时间的数据集中挑选使用频率最低的数据淘汰。
  • allkeys-lru: 从数据集中挑选最近最少使用的数据淘汰。
  • allkeys-random: 从数据集中随机挑选数据淘汰。
  • allkeys-lfu: 从数据集中挑选使用频率最低的数据淘汰。
  • no-enviction: 禁止淘汰数据。默认策略。当内存不足时,新写入数据时会报错。

一个字符串类型的值最大存储容量是多少?

512M

为什么redis需要把所有数据放到内存中?

首先,redis为了将读写速度最大化,将数据读取到内存中,之后通过异步的方式将数据写入磁盘。正因为这样,redis才会具有快速和持久化的特征。

Redis集群的几种实现方案?

客户端分片
  • 由客户端决定key写入或者读取的节点。
  • 包括jedis在内的一些客户端,实现了客户端分片机制。

优点

  • 简单,性能高

缺点

  • 业务逻辑与数据存储逻辑耦合。
  • 可运维性差。
  • 多业务各自使用redis,集群资源难以管理。
  • 不支持动态增删改查。
基于代理的分片
  • 客户端发送请求到一个代理,代理解析客户端的数据,将请求转发至正确的节点,然后将结果回复给客户端。
  • 开源方案:Twemproxy、codis

特点

  • 透明,接入Proxy的逻辑和存储的逻辑是隔离的。
  • 代理层多了一次转发,性能有所损耗。
路由查询
  • 将请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行。
  • 开源方案:Redis-cluster。

Redis有哪些适合的场景?

  • 会话缓存(Session Cache)
    Redis提供持久化。

  • 全页缓存(FPC)
    Magento提供一个插件来使用Redis作为全页缓存后端。

  • 队列
    Redis有提供多种数据结构,其中List可以作为队列。

  • 排行榜/计数器
    Redis在内存中对数字进行递增或递减的操作实现的非常好。

Redis支持的Java客户端有哪些?

Redisson、Jedis、lettuce等,推荐Redission。

说说Redis哈希槽的概念?

Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。使用哈希槽的好处是可以方便的增加和删除节点。

Redis事物相关命令?

MULTI、EXEC、DISCARD、WATCH

Redis的过期时间和永久有效怎么设置?

EXPIRE和PERSIST命令。

什么是缓存穿透?如何避免?什么是缓存雪崩?如何避免?

缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,导致数据库的压力增大。

解决
1.增加接口层校验,id做基础校验,id<=0的数据拦截掉。
2.对于缓存和数据库都没有的数据,可以将key-value设置为key-null,并且有效时间设置短一些。

缓存击穿

缓存击穿是指缓存中没有但数据库中有的数据,高并发情况,读缓存数据没读到,从而不断读取数据库,导致数据库的压力增大。

解决
1.设置热点数据永远不过期。
2.加互斥锁。

缓存雪崩

缓存雪崩是指缓存中大量数据过期,给后端系统带来很大的压力,导致系统崩溃。

解决
1.缓存数据的过期时间设置为随机,防止同一时间大量数据过期。
2.在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。
3.做二级缓存。

redis主从复制如何实现的?

主从复制实现:主节点将自己内存中的数据做一份快照。将快照发送给从节点,从节点数据恢复到内存中。之后在每次增加新数据的时候,主节点以类似于mysql的二进制日志方式将语句发送给从节点,从节点拿到主节点发送过来的语句进行更新。

redis持久化,优缺点?

RDB:在不同的时间点将数据生产的快照同步到磁盘上,内存到硬盘的快照,定期更新。 缺点:耗时,耗性能,易丢失。

AOF:将redis所执行过的指令记录下来,在下次redis重启时,只需要执行指令就可以。 缺点:体积大,恢复速度慢。

redis过期策略都有哪些?

定时删除
  • 含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除。
  • 优点:保证内存被尽快释放。
  • 缺点:
    1.若过期key很多,删除这些key会占用很对的cpu时间,在cpu时间紧张的情况下,cpu不能把所有的时间用来其他的事情。
    2.定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器,影响性能。
惰性删除
  • 含义:key过期的时候不删除,每次数据库获取key的时候去检查是否过期,若过期,则删除。
  • 优点:删除操作只发生在从数据库取出key的时候,而且只删除当前key,所以对cpu时间的占用比较少。
  • 缺点:若大量的key在超出时间后,很久一段时间内,都没有获取过,可能发生内存泄漏。
定期删除
  • 含义:每隔一段时间执行一次删除。
  • 优点:
    1.通过限制删除操作的时长和频率,来减少删除操作对cpu时间的占用,解决了定时删除的缺点。
    2.定期删除过期key,解决了惰性删除的缺点。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值