Redis学习总结

作者: whoami2019 | 来源:发表于2018-05-13 13:58 被阅读100次

    Redis是什么?

    Redis是Nosql的一种,以key-value形式存储于内存中的数据库.提供了 String / List / Set / Sort Set /Hash 五种数据结构。

    Redis特点

    线程模型:单线程-多路复用io模型

    性能高:支持读 11万/秒 ,写 8万/秒

    存储: RDB文件(二进制安全的真实数据) ;  AOF文件(客户端的命令集合)

    事务: 操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

    数据过期设置:按key设置过期时间,过期后将会自动删除

    发布/订阅模式

    数据淘汰策略

    相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。redis 提供 6种数据淘汰策略:

    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(驱逐):禁止驱逐数据

    数据恢复策略

    若RDB模式开启,重启服务器只加载rdb文件内容; 若AOF模式开启,重启服务器只加载aof文件内容; 若两者都开启,只加载aof文件内容

    集群

    功能:将众多的key-value集合存在多个节点上,当某一个节点出现障碍,不影响整个集群的功能。

    方案:目前Redis集群开源的方案主要有Redis Cluster,Codis,Twemproxy等,下面介绍是针对Redis Cluster方案的介绍

    涉及到的关键词:

    节点:一个端口的redis服务便是一个节点

    槽指派(集群将整个系统分为16384个hash槽):这16384个槽位要全部分布在集群中的主节点上。

    重新分片:若某个主节点故障了,将该主节点的槽位分配到其他可以用的主节点上。

    上线/下线状态: 是否全部的槽位都分布在节点上。

    特点:

    1.如果某个节点要集群,必须要设置cluster-enabled yes

    2.每个节点都有这16384个槽位所属的节点信息,如果值没有正确进入槽位,那么该节点会提示系统将信息放入正确槽位。重定向的过程会出现一个面向客户端隐藏的MOVED错误

    3.集群在线状态也可以进行重新分片

    4.集群中的主节点用户处理客户端命令,从节点用于复制主节点的数据,主节点下线时,从节点代替主节点的工作

    主从复制

    功能:数据备份,读写分离

    步骤:在从服务端器执行: slaveof 即可维持关系;配置文件中也可以

    特点:

    1.master可以有多个slave

    2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构

    3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可 以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

    4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余

    5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

    延伸:高访问量下,即使采用了集群分片,1个单独节点还是承受了很大的压力,通常情况下应用访问Redis缓存读操作是写操作的数倍,这时我们改造成读写分离,而且读提供更多的实例数。在Sentinel监控下,还可以保障节点故障的自动检测。

    sentinel(监测系统)

    本质:是一个运行在特殊模式下的redis服务器。

    功能:监控运行在多机上的主redis服务器,若有某一台主服务器出现故障,将自动把其他正常的从服务器切换为主服务器,代替出现故障主服务器的工作。

    特点:

    1.不发挥数据库的功能(所有对key以及数据类型操作的命令不能使用)

    2.将会给监控的主服务器以及主服务器所属的从服务器发送命令,确认是否下线

    3.会和监控同一个主服务器的其他sentinel服务器通信,作用是在共同判断所监控的主服务器的状态

    4.根据多个sentinel判断的主服务器状态,来决定是否要进行主从切换,故障转移等

    转移:sentinel监控的主服务器配置参数要在 sentinel.conf 文件中配置,启动时加载

    redis基准

    redis自带的redis-benchmark 工具,支持各种参数进行性能测试

    特点:

    1.可以模拟多个客户端处理任意个请求

    2.可以测试仅仅少数使用的命令等

    注意:测试发现,linux环境下部署的redis服务器性能远高于windows下部署的redis服务器性能, 不在一个层级上面

    Redis与Memcached

    Redis作为缓存时常拿来和Memcached比较,Memcache在使用上与Redis的主要区别是:仅做缓存使用,没有持久化功能,只支持String类型的数据,因为Redis是单线程多路复用,而Memcached是多线程多路复用,所以Memcache速度不及Redis快,但在多线程环境下性能会优于Redis

    Redis与Memcached的区别

    Redis与Memcached的选择:使用Redis的String类型做的事,都可以用Memcached替换,以此换取更好的性能提升; 除此以外,优先考虑Redis;

    相关文章

      网友评论

        本文标题:Redis学习总结

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