Redis

作者: 汤圆叔 | 来源:发表于2018-07-03 19:23 被阅读12次

原理详情参见redis原理总结

Redis原理了解吗?你们是如何使用的?

Redis是基于内存、单进程单线程模型的KV数据库,由C语言编写。官方数据可达100000+qps。采用单进程单线程依然很快的原因除了它的数据结构、操作简单、完全基于内存,最主要还是它使用了多路 I/O 复用技术。


多路 I/O 复用技术

多路 I/O 复用是利用操作系统提供的select、poll、epoll可以同时监察多个流的 I/O 事件的能力:在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
详情参考IO多路复用—由Redis的IO多路复用yinchRedis 和 I/O 多路复用

  • 单进程单线程好处
    • 代码更清晰,处理逻辑更简单
    • 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
    • 不存在多进程或者多线程导致的切换而消耗CPU
  • 单进程单线程弊端
    • 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善

Redis的数据类型你们都用过哪些,是如何使用的?

  • String:基本操作,最常用,一般用于缓存信息结构比较简单、更新内容是全部更新的场景,常用操作命令:set,get,decr,incr,mget
  • Hash:缓存信息为KV结构化数据并且更新时更多是更新部分内容的场景,常用操作命令:hget,hset,hgetall,比如:用户会话信息的维护,通常只会更新会话信息中的部分信息(最近登录时间、设置session attribute))
  • List:缓存信息为List结构化数据并且更新时更多是更新部分内容的场景,常用操作命令:lpush,rpush,lpop,rpop,lrange,比如:商品的评价列表、会员的粉丝列表,(注意:仅存储部分热点数据,查询非热点数据时依然会走服务)
  • Set:缓存信息为去重List结构化数据并且更新时更多是更新部分内容的场景,常用操作命令:sadd,spop,smembers,sunion

Redis集群了解么?Redis集群高可用、负载均衡你们是如何保证的?

通过主从模式实现高可用,但无法保证数据完全一致性(Redis更适用于缓存场景,对于数据一致性要求较高的场景还是采用数据库或者其他模式的Redis集群)。

Redis持久化机制了解么?

Redis中主从是如何同步的?

Redis的缓存更新你们是如何做的?

主从模式集群,通过更新Redis主结点,完成Redis众多从结点的更新。

Redis的缓存击穿情况你们是如何处理的?

Redis的热点Key的问题你们是如何处理的?

Redis的缓存雪崩情况你们是如何处理的?

如何通过Redis实现分布式锁?

常见的缓存算法有哪些?你们是如何使用的?

相关文章

网友评论

      本文标题:Redis

      本文链接:https://www.haomeiwen.com/subject/zlbjuftx.html