当前位置: 首页 > news >正文

Redis常见指令

1. Redis最重要的俩个指令get/set

redis 是按照键值对的方式存储数据的

语法: 

get: 根据 key 来取 value get key   根据 key 得到对应的value

set: 把 key 和 value 进行存储  set key1 value1 这里的 key 和value 都是字符串

实操:

注意实操前要进入客户端: redis-cli

1) set 的 key 是唯一的, 重复设置会覆盖

2) get 和 set 操作的 key value 都是字符串, 但是我们自己写不需要加""

3) get 的 key 不存在 返回 nil 相当于 null

2. Redis 全局命令

2.1 概念

redis 支持很多的数据结构, 整体而言 redis 是key-value(键值对)的结构, key固定就是字符串, value支持5大数据类型: 字符串, 哈希表, 集合, 列表, 有序集合. 操作不同的数据结构就会有不同的命令

全局命令: 可以搭配任意一个数据结构来使用的命令

2.2 命令

keys 

keys: 用来查询当前服务器上匹配的 key. 通过搭配一些特殊符号(通配符)来描述 key, 查询出匹配出来的key

返回值: 返回符合匹配规则的所有key

匹配原则:

1) ? 匹配任意一个字符

2) * 匹配0个或者多个任意字符

3) [abcde] 指定只能匹配到 a b c d , 其他的匹配不出. (给出固定选项)

4) [^e] 排除 e, 只有 e 匹配不了, 其他都能匹配

5) [a-b] 匹配 a-b 这个范围的字符, 闭区间(包含俩侧边界)

示例:

注意:

1)  keys * 是不能用的, 因为 keys 命令的时间复杂度是 O(N), 从头到尾都会查一遍, redis 是个单线程的服务器, 执行 keys*的时间很长, 就会导致 redis 服务器被阻塞了, 无法给其他的客户端提供服务.

2) redis 经常用来做缓存, 挡在mysql前面, 存储mysql20%的数据,但是处理80%的请求, 因此如果使用keys * , 让 redis 阻塞了, 这些请求会直接给mysql, mysql就会挂了

exists

redis 存储的格式是按照键值对来的(相当于哈希表key-value)

exists 判定 key 是否存在

语法: exist 要判断是否存在的key...(可以写多个key来一起判断)

返回值: key存在的个数

演示:

del 

del 删除指定的 key 

语法: del 要删除的一个或者多个key

返回值: 成功删除的个数

演示

expire 

expire 给指定的 key 设置过期时间, 设置的时间是秒(超过过期时间,就失效了,会自动被删除,比如验证码是5分钟有效,优惠券是几天内有效....)

语法: expire 要设置过期时间的key 过期时间(秒)

返回值: 1 表示设置成功, 0 表示设置失败

ttl 

获取指定 key 的过期时间(秒级别)

语法: ttl 要查询过期时间的key

返回值: 剩余的过期时间(秒). -1 表示没设置过期时间, -2表示 key 不存在

演示:

注: expire 和 ttl 还有毫秒级版本: pexpire pttl 用法不变

过期机制图示

type 

redis支持的常用的数据类型: none, string, set,zset(有序集合),hash,stream(作为消息队列的时候使用)

type 返回 key 对应的数据类型(也就是value的数据类型)
语法: type 要查询的key

返回值: 返回对应key的数据类型

命令演示

redis 的 key 的过期策略如何实现?(面试题)

redis 里面有很多的key, 这些key 中很多都有过期时间, 此时服务器怎么知道哪些key过期,哪些key没过期?直接遍历耗时太长了, 我们会采取下面几种策略:

1. 定期删除

结合定期删除的操作, 每次抽取一小部分key来进行过期时间校验, 这样可以保证抽取检查的时间足够快, 查到了就删除

2. 惰性删除

假设当前的key 已经到了过期时间, 但是我们还没有删除它, key 还是存在, 但是当我们访问到这个key的时候,发现它已经过期了, 那么此时就会触发redis删除这个key的操作, 同时返回一个nil

3. 定时删除(redis没用采用,了解)

1) 基于优先级队列: 按照指定的优先级(key的过期时间越早,优先级越高), 把这个key先放在队首,  然后在等待删除的期间如果有过期时间更短的key进来了, 那么就把顺序进行调整

2) 基于时间轮实现的定时器: 把时间分成很多小段, 每个小段上挂上一个要执行任务(删除key)的链表, 然后每次走到一个小段就会把链表的任务尝试执行一下

http://www.dtcms.com/a/528556.html

相关文章:

  • 机器学习02——环境安装
  • 网站可以用中国二字做抬头吗WordPress 评论框表情
  • 随笔——记一次常见的浮点数精度问题到Grisu3初识
  • 【git】rebase 和 merge 区别及使用建议
  • 机器学习催化剂设计!
  • Agent Zero:重新定义AI Agent的有机生长框架——从“预设工具“到“自我进化“的范式革命
  • 脚本更新--CosMx、Xenium的邻域通讯分析(R版本)
  • VS Code搭建C/C++开发调试环境-Windows
  • 怎么把自己做的网站发布到网上网站建设专题页面
  • 面向智慧农业的自主移动果蔬采摘机器人:融合视觉识别与自动驾驶的智能化农作系统研究
  • 厦门专业网站设计公司低价网站建设推广优化
  • ClickHouse 介绍
  • 何时在 ClickHouse 中使用 ARRAY JOIN
  • Stream流中.filter和.map的用法区别
  • 在万网上域名了怎么做网站网页设计与制作工资多少
  • 哈尔滨网站建设制作费用百度推广销售
  • FireFox如何滚动截屏?
  • 【Linux】Tomcat基本配置
  • 网站建设的系统分析有哪些好的建站平台
  • 【大模型推理】ScheduleBatch 学习
  • 【经典书籍】C++ Primer 第19章特殊工具与技术精华讲解
  • JAVA面试汇总(二)多线程(五)
  • 怎样设计网站模板网站 建设初步
  • 网站建设所需的硬件设备网站运营工作是干什么的
  • 网站中的表格wordpress后台404
  • 从零开始:C++ 多进程 TCP 服务器实战(续篇)
  • 阮一峰《TypeScript 教程》学习笔记——装饰器
  • 一、基础预训练模型与能力
  • 上海网站建设选缘魁-企查公司简介模板文案
  • 重磅新书 | 《链改2.0:从数字资产到RWA》