Redis

Redis简介

1 NoSql简介

关系型数据库索引数据都是树状结构,当数据量特别大时,导致树深度比较深,当深度深时查询性能会大大降低。尽量减少对数据库的操作,能够明显提升程序运行效率。

NoSql (Not Only Sql)

  • memcached:键值对,内存型数据库,所有数据都在内存中
  • Redis:和memcached类似,还具备持久化能力
  • HBase : 以列作为存储
  • MongoDB:以Document做存储

2 Redis简介

​ Redis是以Key-value形式进行存储的NoSQL数据库。

​ Redis是使用C语言进行编写的。

​ 平时操作的数据都在内存中,效率高,所以多把Redis当做缓存工具使用(在一些框架中Redis当做临时数据存储工具)。缓存工具:把数据库中数据缓存到Redis中,由于Redis读写性能较好,访问Redis中数据,而不是频繁访问数据库中数据。

​ Redis以slot(槽)作为数据存储单元,每个槽中可以存储N多个键值对。

​ 同时通过哨兵提供高可用,通过Redis Cluster(集群)提供自动分区。

使用Redis作为缓存工具时流程(边路缓存思想中一部分)

E:\笔记\redis\作为缓存工具流程.PNG

Redis数据类型

​ Redis中数据是key-value刑事。不同类型value是有不同的命令进行操作。key和value都支持下面类型(在代码中多把key设置为String类型):

  • String 字符串
  • Hash 哈希表
  • List 列表
  • Set 集合
  • Sorted Set 有序集合

Redis命令相关手册:

http://www.redis.net.cn/order/
http://doc.redisfans.com/

  1. key操作

    keys *

    exists

    ttl

    expire

    del

  2. String(字符串)

    set

    get

    setnx

    setex

  3. Hash

    Hash类型的值中包含多组field value

    hset

    hget

    hmset

    hmget

    hvals

    hgetall

    hdel

  4. List

    rpush

    lrange

    lpush

    llen

    lrem

  5. Set

    sadd

    scard

    smembers

  6. SortedSet

    有序集合中每个value都有一个分数(score),根据分数进行排序

    zadd

    zrange

Redis持久化策略

​ Redis不仅仅是一个内存型数据库,还具备持久化能力。

​ Redis每次启动时都会从硬盘存储文件中把数据读取到内存中。运行过程中操作的数据都是内存中的数据。

​ 两种持久化策略:RDB和AOF。

1 RDB(Redis DataBase)

​ rdb模式是默认模式,可以在指定的时间间隔内生成数据快照(snapshot),默认保存到dump.rdb文件中。当redis重启后悔自动加载dump.rdb文件中内容到内存中。

​ 用户可以使用SAVE(同步)或BGSAVE(异步)手动保存数据。

​ 可以设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令,可以通过save选项设个多个保存条件,但只要其中任意一个条件被满足,服务器就会执行BGSAVE命令。

​ 例如:save 900 1 save 300 10, 只要满足了两个条件中的任意一个,BGSAVE命令就会被执行。SAVE 900 1,每900秒检测一次,服务器至少做了1次修改

​ 优点:rdb文件是一个紧凑文件,直接使用rdb文件就可以还原数据。数据保存会由一个子进程进行保存,不影响父进程做其他事情。恢复效率高于AOF.

​ 缺点:每次保存点之间导致redis不可意料的关闭时,可能会丢失数据。每次保存数据都需要fork()子进程,在数据量比较大时可能会比较消耗性能。

2 AOF(AppendOnly FIle)

​ AOF默认是关闭的 APPendonly no,需要在配置文件redis.conf中开启AOF。Redis支持AOF和RDB同时生效,如果同时存在,AOF优先级高于RDB(Redis重新启动时会使用AOF进行数据恢复)。

​ AOF原理:监听执行的命令,如果发现执行了修改数据的操作,同时直接同步到数据文件中,同时会把命令记录到日志中。即使突然出现问题,由于日志文件中已经记录命令,下一次启动时也可以按照日志进行恢复数据。

​ 优点:相对RDB数据更加安全。

​ 缺点:相同数据集AOF要RDB。相对RDB可能会慢一些。

​ 开启办法:修改redis.conf中。appendonly yes开启aof。appendfilename设置aof数据文件,名称随意。

Redis主从复制

1. 主从优点

  • 增加单一节点的健壮性,从而提升整个集群的稳定性。(Redis中当超过1/2节点不可用时,整个集群不可用)

  • 从节点可以对主节点数据备份,提升容灾能力

  • 读写分离。在redis中,主节点一般用作写(具备读的能力),从节点只能读,利用这个特性实现读写分离,写用主,读用从。

2. 基于docker一主多从搭建

  1. 拉取redis一主多从

    docker pull redis

  2. 创建并运行三个Docker容器

    先停止单机版Redis

    三个容器分别占用系统的3个端口

  3. 在从中指定主的ip和端口

    只需要设置从

  4. 测试主从效果

哨兵(Sentinel)

​ 在Redis主从默认中只有主具备写的能力,而从只能读。如果主宕机,整个节点不具备写能力。但是如果让一个从变成主,整个节点就可以继续工作。即使之前的主恢复过来也当做这个节点的从即可。单哨兵 多哨兵

Redis 脑裂

Redis集群(Cluster)

1. 集群原理

2. Redis集群安装步骤

  1. 新建配置模板文件
  2. 使用Shell脚本创建6个目录
  3. 创建桥接网络
  4. 创建并启动6个容器
  5. 查看6个容器ip及端口
  6. 执行集群脚本
  7. 验证集群

缓存穿透

缓存击穿

缓存雪崩

Redis 脑裂

Redis集群(Cluster)

1. 集群原理

2. Redis集群安装步骤

  1. 新建配置模板文件
  2. 使用Shell脚本创建6个目录
  3. 创建桥接网络
  4. 创建并启动6个容器
  5. 查看6个容器ip及端口
  6. 执行集群脚本
  7. 验证集群

缓存穿透

缓存击穿

缓存雪崩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值