美文网首页
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