【9天Redis系列】基础+全局命令

文章目录

Redis特性

  • 可作为缓存中间件:克服传统数据库读写慢的问题,Redis存储数据的方式不同于传统的关系型数据存储,而是采用键值对的非关系型存储

  • 交互命令简单:还可以用脚语言来批量操作

  • 扩展性高:Redis原生支持存储string、list、set、hash等数据存储格式,Redis保留了扩展api,可以自定义数据格式作为'值'来存储,还可以自定义操作命令

  • 支持数据持久化:Redis把数据作为备份存储在硬盘上,当Redis重启丢失内存中数据时,从硬盘同步数据

  • 高可用性:作为集群部署稳定可靠。Redis集群中每个节点代表一个主节点,每个主节点搭配多个从节点,从节点不仅可以备份主节点数据还可以分担主节点的'读'压力,当主节点发生错误挂掉从节点可以快速顶上胜任主节点的工作

  • 性能优秀速度快 :Redis采用了单线程,核心功能增删改查都是简单逻辑使用,单线程足以胜任且由于是内存级别的读写,速度会非常快

    为何不采用多线程:多线程发生发生线程竞争、线程切换的时间开销甚至远超读写时间,制约Redis 性能的最大因素是网络的请求响应,于是在Redis6.0后在网络IO阶段采用IO多路复用(多线程处理),核心的增删改查仍然是单线程

  • 键值对存放数据:Redis以键值对的形式存放数据

  • 以二进制格式存储数据:Redis存储数据输入和输出都是二进制

  • Redis存储隔离:一个Redis服务器自带15个数据库,不支持添加数据库,它们互相隔离,每个库容量只取决于服务器内存大小

Redis典型使用场景

  • 作为缓存中间件,Redis能很好地应付高并发场景,Redis从数据库同步数据,缓解大量访问压力
  • 保存session数据,session在服务端存储,但在分布式系统中,服务器间的数据不一定全部同步,持有sessionId的客户端却可能无法在其他服务器获得服务,将session放在Redis中,这样所有服务器都从Redis中获取session校验 客户端身份
  • 手机验证码登录,Redis可以设置key的过期时间,刚好满足验证码使用时限的场景

Redis 为什么这么快

Redis为什么这么快:(快是相对MySQL、Oracle等数据库而言的)

  1. 内存级别的操作,而MySQL等是操作硬盘
  2. 数据操作逻辑简单,与之对比关系型数据库更'重',涉及索引、约束、事务等
  3. 采用单线程模型,核心操作单线程足以应付且避免了多线程竞争、切换的开销
  4. Rdis6.0后,网络采纳了多线程,且每个线程都是I/O多路复用,每个线程都可以处理多个socket(说人话就是网络通信连接)

全局命令


1)文章根据Redis6.0版本编写

2)所有涉及到下标的都支持负数下标,所有涉及到区间的默认指闭区间('[ ]');

3)符号含义:必选:'< >'、可选:'[ ]'、多选一:'|'、多个:'...'、如果'[ ]'里有单词是大写的,代表使用这种修饰符必须要写上这个大写单词


Redis全局命令:(很多命令都支持一次性操作多个键值对,网络IO的时间开销使得Redis不得不这样做)

  • select index:选择使用的数据库编号(0~15),默认使用0号数据库
  • dbsize :返回当前数据库key的数量
  • keys < pattern > :获取所有满足条件的键名,其中pattern(?、*、[ ]、^、-)代表匹配条件
    • ·h?llo( 匹配单个任意字符):匹配 hello, hallo 和 hxllo
    • h*llo (匹配0个或多个字符) :匹配 hllo 和 heeeello 【但是特别危险,keys命令是顺序查找的时间复杂度O(N),如果匹配到大量key可能会让redis挂掉】
    • h[ae]llo ( 匹配单个指定字符,这里匹配字符a或者e):匹配 hello 和hallo, 而hillo 不行
    • h[^e]llo(匹配字符e以外的单个任意字符): 匹配 hallo, hbllo, ... 而 hello 不行
    • h[a-b]llo (匹配字典序a到b的单个字符):匹配 hallo 和 hbllo
  • scan cursor [MATCH pattern] [COUNT count] [TYPE type] :渐进式遍历,cursor代表哈希槽的一个位置作为每次扫描的起点(扫描标记);每次扫描返回下一次扫描的cursor和扫描结果;
    但请注意,你输入的cursor无效,它只会按它内部的扫描规则来,返回给你cursor是通知你它下次扫描的cursor;扫描返回的cursor为0标识扫描开始,返回的cursor为0表示扫描结束
    • MATCH:使用的pattern样式同keys命令的pattern一样,可以使用'?'、'*'、'[]'、'[^]'、'[-]'来限定匹配key
    • COUNT:每次扫描返回的key个数,但是注意,Redis仍不会严格遵循这个返回条数,会返回跟count数值相近条数
    • TYPE:限定key对应的value的类型
  • exists key [key1...]:查找键是否存在,返回存在个数,支持同时查找多个键,如果表达式里重复一个键返回值也计入重复个数;查找时间复杂度为O(N),N代表查出的键数
  • del key [key1...]:删除一个或多个键,返回删除键数,时间复杂度为O(N),N为删除的键数
  • expire key seconds [NX|XX|GT|LX] :设置key过期时间,单位为秒,后缀作用:
    • NX:只能为没有过期时间的key设置过期时间
    • XX:只能为有过期时间的key设置
    • GT:只能为key设置比当前过期时间的更大的过期时间才有效(greater than)
    • LX:只能为key设置比当前过期时间的更小的过期时间才有效(less than)
  • pexpire key milliseconds [NX|XX|GT|LT]:作用同expire但是单位为毫秒
  • ttl key:通常搭配expire/pexpire使用,查看当前key的剩余过期时间,返回数据单位为秒,返回-1时代表当前key没有过期时间,返回-2代表当前key不存在
  • type key:获取当前键对应的值的数据类型,支持原生的string, list, set, zset, vectorset, hash, and stream类型,键不存在返回none。不支持返回自定义数据类型
  • object encoding key:获取值的实际数据结构,比如value=123,用type key返回string,而该命令返回int,具体有哪些类型参考后面的数据存放策略章节
  • flushall [ASYNC|SYNC] :清除所有数据库里所有的键,返回"OK"相当于删库了,【跟keys *一样危险,时间复杂度O(N)】
    • ASYNC:同步操作,Redis服务阻塞全用来遍历删除
    • SYNC:异步操作,Redis正常运行,而删除操作交给后台IO线程
  • flushdb [ASYNC|SYNC]:删除当前数据库所有的key

明天见

相关推荐
s***469842 分钟前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
f***R81 小时前
redis分页查询
数据库·redis·缓存
g***72701 小时前
【mysql】导出导入mysql表结构或者数据
数据库·mysql
煎蛋学姐1 小时前
SSM汽车租赁管理系统mfobv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·汽车·ssm 框架·汽车租赁管理系统
w***37511 小时前
Spring 核心技术解析【纯干货版】- Ⅶ:Spring 切面编程模块 Spring-Instrument 模块精讲
前端·数据库·spring
runepic1 小时前
Python + PostgreSQL 批量图片分发脚本:分类、去重、断点续拷贝
服务器·数据库·python·postgresql
i***11862 小时前
Django视图与URLs路由详解
数据库·django·sqlite
2***c4352 小时前
Redis——使用 python 操作 redis 之从 hmse 迁移到 hset
数据库·redis·python
2***d8852 小时前
redis的启动方式
数据库·redis·bootstrap