Redis 特性

作者: 一块大番薯 | 来源:发表于2018-04-09 21:09 被阅读18次

    一、键的过期

    Redis 可以为每个键设置过期时间,当键过期时,会自动删除该键。

    二、事务与流水线

    使用 MULTI 和 EXEC 命令将事务操作包围起来,一次性发送给服务器,这种方式称为流水线,它可以减少客户端与服务器之间的网络通信次数从而提升性能。

    三、持久化

    将内存数据持久化到硬盘。

    1. 快照持久化

    将某个时间点的数据存放到硬盘。
    缺点:
    如果系统发生故障,将会丢失最后一次创建快照之后的数据。
    如果数据量很大,保存快照的时间会很长。

    2. AOF 持久化

    对要写入到硬盘的数据先存放到缓冲区,再由以下同步选项决定何时写入到硬盘:

    选项 同步频率
    always 每个写命令都同步,严重减低服务器的性能
    everysec 每秒同步一次,比较合适
    no 由操作系统来决定,不能显著提升性能,反而增加系统奔溃时数据丢失的数量

    当然,也可手动 file.fulsh() 写入到硬盘。

    AOF (Append Only File)文件是用来存放写命令的,也就是要写什么入硬盘。随着服务器写请求的增多,AOF 文件会越来越大,Redis 提供了一种将 AOF 重写的特性,能够去除 AOF 文件中的冗余写命令。

    四、复制

    指主服务器复制到从服务器。
    首次从服务器先载入主服务器发来的快照文件,之后接受主服务器发来的写命令。

    通过使用 slaveof host port 命令来让一个服务器成为另一个服务器的从服务器。

    在一个 Redis 集群中,master 负责写请求,slave 负责读请求。
    一方面 master 把读请求分散到其他机器从而减少了服务器压力;
    另一方面 slave 专注于提供读服务从而提高了响应和读取速度。

    五、分片

    数据分散到多个 Redis 实例中。
    对比将所有数据只存放的单台 redis 实例,能大大减轻 redis 实例压力。

    还有两个问题:
    一是如何分片,也就是如何合理地把数据分成一块一块,标准是什么?
    二是在哪里进行分片,客户端?服务器?代理?

    六、适用场景

    • 缓存:将热点数据放入缓存。
    • 消息队列:LIST 是双向链表,适合用于消息队列。
    • 计数器:内存数据库,适合计数器频繁读写操作。
    • 好友关系:两个 SET 的交集,可知两个用户的共同好友。

    参考文档:

    https://github.com/CyC2018/Interview-Notebook/blob/master/notes/Redis.md

    相关文章

      网友评论

        本文标题:Redis 特性

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