Redis

redis 持久化场景

        RDB RDB持久化就是指的讲当前进程的数据生成快照存入到磁盘中

        1. 手动触发RDB

            "save"命令,但是"save"命令将会阻塞我们的Redis服务器直到RDB完成,所以真实的环境中一般不会使用该命令。 

            "bgsave"命令,使用该命令Redis会fork一个子进程来负责RDB持久化,完成持久化后自动结束子进程,所以阻塞只发生在fork的阶段。

        2. 自动触发RDB

            自动触发RDB只要在redis的conf 配置文件中配置 save相关的配置即可,如 "save m n",这就代表在m秒内我们的数据发生了n次修改就会使用“bgsave”命令自动触发RDB

        AOF

            AOF持久化是以独立的日志记录每次写命令,重启Redis的时候再重新执行AOF文件中命令以达到恢复数据,所以AOF主要就是解决持久化的实时性。

        1、AOF原理

            1)、所有的写入的命令都会被追加到aof_buf这么一个缓冲区中

            2)、接着AOF缓冲区根据对应的同步策略向磁盘做同步的操作,这里说一下同步策略,同步策略可以通过修改redis配置文件中的参数"appendfsync"进行配置。

            3)、随着AOF文件变大,定期对文件进行重写操作来压缩文件

            4)、Redis服务器重启的时候就会加载AOF文件用来恢复数据

            ---------------------

            作者:nuomizhende45

            来源:CSDN

            原文:https://blog.csdn.net/nuomizhende45/article/details/82556829

            版权声明:本文为博主原创文章,转载请附上博文链接!

        三、RDB与AOF优劣势分析

        1.RDB优劣势

        优势:

        RDB只代表某个时间点上的数据快照,所以适用于备份与全量复制,如一天进行备份一次。

        Redis再加载RDB文件恢复数据远快于AOF文件

        性能上考虑RDB优于AOF,因为我们保存RDB文件只需fork一次子进程进行保存操作,父进程没有对磁盘I/O

        劣势:

        RDB没办法做到实时的持久化数据,因为fork是重量级别的操作,频繁执行成本过高

        RDB需要经常fork子进程来保存数据集到磁盘,当数据集比较大额时候,fork的过程是比较耗时的,可能会导致redis在一些毫秒级不能响应客服端请求

        老版本的Redis无法兼容新版本的RDB文件

        2.AOF优劣势

        优势:

        通过配置同步策略基本能够达到实时持久化数据,如配置为everysec,则每秒同步一次AOF文件,也就是说最多丢失一秒钟的数据,兼顾了性能与数据的安全性

        AOF 文件是一个只进行追加操作的日志文件(append only log), 因此对 AOF 文件的写入不需要进行 seek , 即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机,等等), redis-check-aof 工具也可以轻易地修复这种问题。

        劣势:

        对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。

        与AOF相比,在恢复大的数据时候,RDB方式更快一些

        ---------------------

        作者:nuomizhende45

        来源:CSDN

        原文:https://blog.csdn.net/nuomizhende45/article/details/82556829

        版权声明:本文为博主原创文章,转载请附上博文链接!

基本的数据类型 https://www.jianshu.com/p/d645cebff386

        String: 字符串

            string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。一个键最大能存储512MB

        Hash: 散列

            ziplist和hashtable

            Hash是一个健值对集合,是一个String类型的key与value的映射表,特别适合用于存储对象。

            使用场景:存储、读取、修改用户属性

        List: 列表

            使用的是双向链表

            排序、消息队列

        Set: 集合

            集合是通过整数集合和字典实现的,所以添加,删除,查找的复杂度都是O(1)

            使用场景:1.共同好友、二度好友 2.利用唯一性,可以统计访问网站的所有独立 IP 3.好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐

        Sorted Set: 有序集合

            有序集合需要同时使用跳跃表和字典来实现

            使用场景:1.带有权重的元素,比如一个游戏的用户得分排行榜 2.比较复杂的数据结构,一般用到的场景不算太多

Redis和memcache的区别

        网络IO模型

        数据支持类型

        内存管理机制

        数据存储机持久化

        数据一致性问题

        集群管理不同

你可能感兴趣的:(Redis)