Redis简介

Redis简介

redis和memcache区别

Memcache

  • 支持简单数据类型
  • 不支持数据持久化存储
  • 不支持主从
  • 不支持分片

Redis

  • 数据类型丰富
  • 支持数据磁盘持久化存储
  • 支持主从
  • 支持分片

为什么Redis能这么快

  • 10万+QPS (QPS即query per second,每秒内查询次数)
  • 数据结构简单,对数据操作也简单
  • 采用单线程(主线程是单线程,对于客户端的读写请求一直是串行处理,不会有并发的问题,避免了上下文切换和锁的竞争,执行起来效率更高),单线程也能处理高并发请求,想多核也可启动多实例
  • 使用多路I/O复用模型,非阻塞IO

传统的阻塞I/O模型

在这里插入图片描述
如果对一个文件操作时,他的文件描述符为不可读或者不可写时,则redis服务则不会对其他的操作做出响应,导致整个服务不可用。

多路I/O复用模型

在这里插入图片描述
在这里插入图片描述

Redis的数据类型

  1. String:最基本的数据类型,二进制安全
  2. Hash:String元素组成的字典,适用于存储对象
    hmset lilei name “lilei” age 26
    hget lilei age
  3. List:列表,按照String元素插入顺序排序
    lpush mylist aaa
    lpush mylist bbb
    lrange mylist 0 10
  4. Set:String元素组成的无序集合,通过哈希表实现,不允许重复
    sadd myset 111
    sadd myset 222
    smembers myset
  5. Sorted Set:通过分数来为集合中的成员进行从小到大的排序
    zadd myzset 3 abc
    zadd myzset 1 abd
    zadd myzset 2 bnf
    zrangebyscore myzset 0 10
  6. 用于计数的HyperLogLog
  7. 用于支持存储地理位置信息的Geo

从海量key里查询出某一固定前缀的key

首先要摸清数据规模,数据量特别大的时候不能直接keys parttern
我们可以使用游标scan
SCAN cuisor [MATCH pattern] [COUNT count ]

  • 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程
  • 以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历
  • 不保证每次执行都返回某个给定数量的元素,支持模糊查询
  • 一次返回的数量不可控,只能大概率符合count参数

如何通过Redis实现分布式锁

SET key value [EX seconds] [PX milliseconds] [NX|XX]

  • EX second:设置键的过期时间为second秒
  • PX millisecond:设置键的过期时间为millisecond 毫秒
  • NX:只在键不存在时,才对键进行设置操作
  • XX:只在键存在时,才对键进行设置操作
  • SET操作成功完成时,返回OK,否则返回nil

实现异步队列

使用List作为队列,RPUSH生产消息,LPOP消费消息
缺点:等待队列里有值不会直接消费,必须lpop才能拿到队列里面的消息
弥补:可以通过应用层引入Sleep机制去调用lpop重试;或者
BLPOP key [key …] timeout:阻塞直到队列有消息或者超时

Redis如何持久化

RDB持久化

保存某个时间点的全量数据快照
  • save:阻塞Redis的服务器进程,直到RDB文件被创建完毕
  • bgsave:Fork出一个子进程来创建RDB文件,不阻塞服务器进程

AOF(Append-Only-File)持久化:保存写状态

  • 记录下除了查询以外的所有变更数据库状态的指令
  • 以append的形式追加保存到AOF文件中(增量)

RDB和AOF优缺点

RDB优点:全量数据快照,文件小,恢复快
RDB缺点:无法保存最近一次快照之后的数据

AOF优点:可读性高,适合保存增量数据,数据不易丢失
AOF缺点:文件体积大,恢复时间长

最好的持久化方式: bgsave做镜像全量持久化,AOF做增量持久化

Redis数据的恢复

RDB和AOF共存下恢复流程:
如果存在AOF,加载AOF,完成启动;
如果不存在AOF,加载RDB,完成启动;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值