您的位置:首页 > 数据库 > Redis

Redis入门基础内容(转载整理非原创)

2017-06-08 11:57 477 查看

Redis那点小知识。

    redis作为主流的NOSQL在项目中是经常会使用到的,那么大家对redis的底层基础又知道哪些呢?掌握了Redis的底层基础会使你应用redis得心应手。在这里我为大家讲解一些我在学习redis过程中学习到的东西,当然这些都是很基础的,希望能够帮助到大家。

    知识点:

1.Redis核心对象。
2.Redis数据类型
3.Redis持久化
4.Redis淘汰策略
5.Redis事件 

Redis核心对象:

         redis有一个核心对象是RedisObject,是redis数据类型的共同父类。

            

        举例:redis在set一个字符串时,它会去根据值进行存储,意思就是说你的字符串当中全部都是数据那么,setString时它底层其实存储的是-->整数(REDIS_ENCODING_INT)现在大家明白了吧。

        那以后别人问你redis底层数据结构有哪些,你就可以跟他说,redis底层数据结构有7种,整数、字符串、双端链表、跳跃表、压缩列表、字典、整数集合。

Redis数据类型:

        在这里就不跟大家详解了,数据类型是redis基础,大家只要记住redisObject这个父类的数据类型,记住数据类型在set的时候其实是根据一定的条件去判断存储什么样的数据类型就可以了呢。

可以参考这里:Redis数据结构 - string字符串

Redis持久化:

        这个是redis的一大亮点,现在甚有些项目不采用sql数据库,而采用redis来充当了sql数据库,当然只是少部分。

        它主要的特点就是可以将一些数据像sql数据库一样持久化到磁盘当中,在你需要这些数据的时候,直接采取恢复就可以了,而不用重新去查询数据库增加数据库。

        Redis有俩种持久化方式:一种是RDB持久化。它是实现方式是什么呢?RDB持久化有俩种,一种是手动快照,一种是自动快照。先说说

        自动快照:在某个时间点把内存中的所有数据的快照保存一份到磁盘上。在条件达到时通过fork一个子进程把内存中的数据写到一个临时文件中来实现保存数据快照。在所有数据写完后再把这个临时文件用原子函数rename(2)重命名为目标rdb文件。(通过fork(linux函数创建子进程)一个子进程进行)

        手动快照:通过save命令主动触发保存数据快照,这种是阻塞式的,即不会通过生成子进程来进行数据集快照的保存。(是由主进程进行快照操作,会阻塞其他请求)

        

        redis.conf文件中配置。redisRDB持久化是默认开启的,如果想关闭RDB持久化,可以将图片中这三段注释掉,然后 将redis.conf中的 # save ""  改为 save "" 就好了。

        Redis另一种持久化就是AOF精细快照持久化,他的实现方式是什么呢:

           1.后台执行:与RDB有些相似,同样是fork()一个子进程,主进程任进行服务,子进程进行AOF持久化,数据被转接到磁盘上,不同于RDB的是后台进程持久化过程中,主进程会记录期间所有的数据变更(主进程还在服务),并进行存储(server.aof_rewrite_buf_blocks 中),后台进程结束后,redis更新缓存追加到AOF文件中。

           2.边服务边备份:就是redis把所有的数据变更存储到server.aof_buf中,并在特定时机将更新缓存写入预设定的文件(server.aof_filename)当中

      特定时机分为三种:1.进入事件循坏之前。2.redis停止服务定时程序serverCron()函数中。3.停止AOF策略的stopAppendOnly()函数中。

        

        在redis.conf中配置。

        介绍了RDB与AOF实现方式,那他俩的作用和区别呢?

RDB优点:

1.紧凑易于备份

2.RDB可以最大化redis性能、父进程无需做任何操作只需要fork一个子进程即可

3.恢复比AOF快

RDB缺点:

1.数据完整性:如果非常注重数据的完整性,那么RDB就不行,虽然他是一个point-in-time 的快照方式,但是在快照的过程中,redis重启了,那么在快照中的这些数据将会丢失

2.数据非常庞大后,非常耗CPU和时间,那么redis讲可能down掉1秒钟甚至更长。

AOF优点:

1.使用 AOF 持久化会让 Redis 变得非常耐久,AOF默认的每一秒追加一次也可以修改他的方式每执行一次命令追加一次,所以你最多丢失1秒钟的数据

2.AOF 文件是一个只进行追加操作的日志文件(append only log)

3. Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写

AOF缺点:

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

2. 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB

    简单来说:如果无法承担几秒钟数据的损失,就可以使用AOF替代RDB持久化,因为它更精细。


淘汰策略:

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

        前段时间有一个面试题:你如何保证redis当中存储的就是热数据呢,这就是redis淘汰策略的事情了,一般使用lru 和ttl就OK了。那如何使用呢,其实这个不需要我们去手动清理,redis提供了时间函数,时间函数当中自动调取淘汰策略去清除了一些过期数据,就可以保证存储的数据都是热数据。


Redis事件:

        时间事件:

            事件函数:serverCron();(在redis.c文件中)

            作用:

                1.更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等

                2.清理数据库中的过期键值对

                3.对不合理的数据库进行大小调整

                4.关闭和清理连接失效的客户端

                5.尝试进行 AOF 或 RDB 持久化操作

                6.如果服务器是主节点的话,对附属节点进行定期同步

                7.如果处于集群模式的话,对集群进行定期同步和连接测试


Redis特点:

    1.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

    2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

    3.Redis支持数据的备份,即master-slave模式(主从)的数据备份。

Redis厉害在哪里:

    1.性能极高(Redis能读的速度是110000次/s,写的速度是81000次/s 。)

    2.丰富的数据类型(redis提供五种数据类型:string,hash,list,set及zset)

    3.原子性(Redis的所有操作都是原子性的)

    4.Redis还支持 pub/sub, 通知, key 过期等等特性。(发布订阅消息队列

    5.数据持久化(RDB与AOF)



   这里只是给大家介绍了一些redis的基本知识,如果大家想要很好的掌握redis可以去讲redis.conf配置文件进行翻译,翻译之后阅读,大家会发现很多你不知道的知识点哦,而且用起来还会得心应手。


参考:redis配置文件详解

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: