美文网首页
Redis高级以及面试分析

Redis高级以及面试分析

作者: 简简天天 | 来源:发表于2020-03-29 19:26 被阅读0次

    Redis基础

    什么是Redis?

    Redis是一个开源(BSD)许可的,内存中的数据结构存储系统,key-value的非关系型数据库(nosql not only sql),它可以用作数据库、缓存和消息中间件。

    Redis的获取、安装或卸载

    $ wget http://download.redis.io/releases/redis-5.0.8.tar.gz
    $ tar xzf redis-5.0.8.tar.gz
    $ cd redis-5.0.8
    $ make
    

    make完后redis-5.0.8目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
    src 目录 中现在提供了已编译的二进制文件 。使用以下命令运行Redis:

    cd src
    ./redis-server
    

    您可以使用内置客户端与Redis进行交互:

    $ src/redis-cli
    redis> set foo bar
    OK
    redis> get foo
    "bar"
    
    • 在 Ubuntu 系统安装 方式(二)
    $sudo apt-get update
    $sudo apt-get install redis-server
    

    Redis的启动(守护进程的启动)和卸载

    • 启动
    #keys * 查看所有key
    127.0.0.1:6379> keys *
    1) "foo"
    2) "fo"
    sudo cp redis.conf ./src/
    sudo vim redis.conf
     ./redis-server redis.conf
    
    image.png
    • 关闭
    ps -ef | grep redis
    kill -9 13288
    
    • 卸载
      删除redis.conf
      删除redis-5.0.8
      删除redis-5.0.8.tar.gz

    redis和memcached对比

    • redis是基于内存的存储系统,速度快,支持持久化
    • redis和memcached都是内存对象缓存系统,速度都很快,但是redis支持持久化,memcached不支持,断电数据消失。
    • redis比memcached支持更多数据结构,memcached所有值都是简单的字符串,优先选择redis.

    redis的数据结构

    • 字符串:String类型


      image.png
    • 哈希:Hash类型
    hash类型设置语法:hset 键 field value,一个键可以有很多个field,很适合存储对象。例如一个hash存储user键,有name和age两个字段
    
    image.png
    • 列表:List 类型
      Redis支持list数据结构,底层是一个双向链表,允许重复值存在,按照插入顺序保存,lpush从左边插入,rpush从右边插入。lpop从左边弹出,rpop从右边弹出,这样很容易实现FIFO(First in first out)队列思想,插入和弹出不同方向就可以实现;FILO(firsst in last out)栈的思想,插入和弹出相同方向操作可实现。


      image.png
      image.png
    • 集合:Set类型
      redis的Set是String类型的无序集合,集合成员是唯一的,集合中不能出现重复的数据。Redis中的集合是通过哈希表来实现的,所以添加、删除、查找的时间复杂度都是O(1)


      image.png
    • 有序集合:sorted set
      sorted set是set的升级,它在set的基础上增加了一个顺序的属性,这一属性在添加元素的时候指定后,zset会自动按新的值调整顺序。


      image.png
      image.png
      image.png
    • 5种数据结构的对比和选择
      1、最常用的是string结构,key和value都是string
      2、哈希,比较适合对对象的操作
      3、列表,有序可重复。按照插入顺序保存,value是可以重复的,底层是双向链表,很方便的实现FIFO(队列,相反方向操作)和FILO(栈,相同方向操作)
      4、集合,string类型的无序集合,集合成员是唯一的,不能重复,底层是哈希实现的。
      5、有序集合,是集合的升级版,有序且唯一。通过分数实现排序,不能重复。

    Redis的持久化策略

    • redis持久化策略整体介绍
      redis能将数据保存在内存中,提高性能。但是redis同时支持数据的持久化,有两种策略:RDB和AOF.这两种方式都可以通过redis.conf进行配置。
      持久化策略能尽量保证当断电或者服务故障的时候,保证数据的安全性,通过持久化策略进行数据的持久化,在重启服务的时候,进行数据的恢复。数据的加载流程如下:会优先检查是否开启aof策略,有则加载aof文件恢复数据,否则载rdb文件进行数据恢复。


      image.png
      image.png
    • rdb策略
      rdb策略是通过redis.conf文件进行配置的,默认开启
      1、900s以内,执行了1次键值的改变,就进行保存的操作


      image.png

    2、保存到此文件


    image.png

    3、压缩方式保存


    image.png
    采用LZF压缩方式,占用了CPU时间,若关闭,导致数据库文件变的巨大,建议开启。
    4、redis数据保存在内存中,redis服务中断再重启,理论上数据会消失。因为dump.rdb文件的存在,重新启动redis服务的时候,会加载dump.rdb文件,恢复数据,所以中断重启,redis的数据还存在。

    删掉dump.rdb文件后再重启,数据丢失。
    5、优点
    适合大规模的数据恢复(压缩保存策略),数据恢复快。
    如果业务对数据的完整性和一致性要求不高,RDB是很好的选择。
    6、缺点
    RDB可能在最后一次备份时宕机了。
    备份时占用内存,因为Redis在备份时会独立创建一个子进程,将数据写入到一个临时文件,此时内存中的数据文件是原来的两倍哦,最后再将这个临时文件替换原来的备份文件,当数据比较大的时候,可能会造成redis服务的短暂暂停,卡顿。

    • AOF策略
      1、AOF策略是通过redis.conf文件配置的,默认是关闭的。
      2、它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式记录每个写操作,并且追加到文件中。Redis重启的时候会根据日志文件的内容将写指令从前到后执行一次,以完成数据的恢复工作。


      image.png
      image.png
      image.png

      3、优点:数据的完整性和一致性更高
      4、缺点:AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

    • RDB和AOF两种策略的对比和使用


      image.png
      image.png

    Redis的过期键删除和淘汰策略(内存管理:memory management)

    Redis的特点是数据存储在内存中,保证数据的高效。那么瓶颈就会在内存这里,应该充分利用有效内存。关于redis的内存管理,redis从两方面处理:

    • 过期键的处理
      redis可以设置键的过期时间,当这个键过期后,没有从redis中清除,而是存在过期字典中,依然占用内存。对于过期键,redis提供三种策略进行清除:


      image.png
      image.png

      一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。
      单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。
      系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
      QPS(TPS):每秒钟request/事务 数量
      并发数: 系统同时处理的request/事务数
      响应时间: 一般取平均响应时间

    • 淘汰策略
      当Redis使用的内存达到某一个设置值的时候,对redis存的所有的数据进行处理。


      image.png
      image.png
      image.png
      image.png
      image.png
      image.png
      image.png

    总结

    image.png

    相关文章

      网友评论

          本文标题:Redis高级以及面试分析

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