redis 所有模糊key 查询_Redis剖析

本文介绍了Redis作为缓存中间件的作用,对比了Memcache和Redis的区别,重点阐述了Redis的高效性及其数据结构,包括String、Hash、List、Set和Sorted Set。还探讨了Redis的模糊查询方法,如使用KEYS和SCAN命令,并讨论了分布式锁的实现。最后提到了Redis的持久化机制,包括RDB和AOF,以及它们的优缺点和混合持久化策略。
摘要由CSDN通过智能技术生成

前言

常用的SQL数据库的数据都是存在磁盘中的,虽然在数据库底层也做了对应的缓存来减少数据库的IO压力,但由于数据库的缓存一般是针对查询的内容,而且粒度也比较小,一般只有表中的数据没有发生变动的时候,数据库的缓存才会产生作用,但这并不能减少业务逻辑对数据库的增删改操作的IO压力,因此缓存技术应运而生,该技术实现了对热点数据的高速缓存,可以大大缓解后端数据库的压力。

主流应用架构

573a89215d8cb83a315213e370f0f205.png

客户端在对数据库发起请求时,先到缓存层查看是否有所需的数据,如果缓存层存有客户端所需的数据,则直接从缓存层返回,否则进行穿透查询,对数据库进行查询,如果在数据库中查询到该数据,则将该数据回写到缓存层,以便下次客户端再次查询能够直接从缓存层获取数据。

缓存中间件 -- Memcache和Redis的区别

  • Memcache:代码层类似Hash
  • 1.支持简单数据类型
  • 2.不支持数据持久化存储
  • 3.不支持主从
  • 4.不支持分片
  • Redis
  • 1.数据类型丰富
  • 2.支持数据磁盘持久化存储
  • 3.支持主从
  • 4.支持分片

为什么Redis能这么快

Redis的效率很高,官方给出的数据是100000+QPS(query per second),这是因为:

1.Redis完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高。

2.Redis使用单进程单线程模型的(K,V)数据库,将数据存储在内存中,存取均不会受到硬盘IO的限制,因此其执行速度极快,另外单线程也能处理高并发请求,还可以避免频繁上下文切换和锁的竞争,如果想要多核运行也可以启动多个实例。

3.数据结构简单,对数据操作也简单,Redis不使用表,不会强制用户对各个关系进行关联,不会有复杂的关系限制,其存储结构就是键值对,类似于HashMap,HashMap最大的优点就是存取的时间复杂度为O(1)。

4.Redis使用多路I/O复用模型,为非阻塞IO(非阻塞IO会另写一篇解释,可以先行百度)。


:Redis采用的I/O多路复用函数:epoll/kqueue/evport/select

选用策略:

1.因地制宜,优先选择时间复杂度为O(1)的I/O多路复用函数作为底层实现。

2.由于select要遍历每一个IO,所以其时间复杂度为O(n),通常被作为保底方案。

3.基于react设计模式监听I/O事件。


Redis的数据类型

  • String
  • 最基本的数据类型,其值最大可存储512M,二进制安全(Redis的String可以包含任何二进制数据,包含jpg对象等)。
37e30b849acf569c4dcc04bc71508c2b.png

注:如果重复写入key相同的键值对,后写入的会将之前写入的覆盖。

Hash

String元素组成的字典,适用于存储对象。

3f9769ffb5f0c0b67df4ef3d212cfdc9.png

List

列表,按照String元素插入顺序排序。其顺序为后进先出。由于其具有栈的特性,所以可以实现如“最新消息排行榜”这类的功能。

5eb3da0616f639848ae02652166fea5f.png

Set

String元素组成的无序集合,通过哈希表实现(增删改查时间复杂度为O(1)),不允许重复。

af3a8ae050c03a3897ada818135a0bf6.png

另外,当我们使用smembers遍历set中的元素时,其顺序也是不确

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值