redis 通用命令
目录
通用命令是什么
SET & GET
keys
EXISTS
DEL
EXPIRE
TTL
redis 的过期策略
定时器策略
基于优先级队列定时器
基于时间轮的定时器
TYPE
通过 redis 客户端和 redis 服务器交互。
所以需要使用 redis 的命令,但是 redis 的命令非常多。
通用命令是什么
在 redis 中,对于存入的不同数据的操作的命令是不同的,但是还是有一些命令是通用的,而这些对所有数据类型都通用的命令就是 ”通用命令“。
在介绍通用命令之前,其实我们可以去官方网站去学习一些有关 redis 的一些内容。
[Redis](https://redis.io/)
我们就可以在主页面上有一个 search 可以用来搜索命令。
这里我们可以启动客户端,然后我们可以使用 ping 命令来验证一下连通性。
127.0.0.1:6379> ping
PONG
如果联通成功的话,那么就会返回 pong,实际上 redis 的命令一般都是大写和 mysql 是一样的,虽然小写也可以支持。
SET & GET
redis 是按照键值对的方式来存储的。
-
get:根据 key 来获取对应的 value
-
set:把 key 和 value 设置进去
这里的 key 和 value 都是字符串。
set key value
如果设置成功返回 OK
上面就是 set 的简单语法,set 后面跟一个 key 在跟一个value。
上面虽然说 key 和 value都是字符串,但是在set 的时候并不需要加双引号或者单引号。
127.0.0.1:6379> SET key1 value1
OK
下面可以通过 key 来获得 value
get key
如果有 key 就会返回对应的 value,否则就会返回 nil,上面的 nil 就是表示空或者不存在的意思。
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
(nil)
KEYS
-
keys 可以查询当前 redis 中的 key
KEYS pattern
-
pattern 就是匹配模式
-
?:表示匹配任意多一字符
-
*:匹配任意多个字符
-
[abc..]:匹配方括号里面的字符
-
[^abc]:匹配除非方括号里面的字符
-
[a-b]:匹配a~b中的字符
下面可以试一下
插入一批数据
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hallo 1
OK
127.0.0.1:6379> set hbllo 1
OK
127.0.0.1:6379> set heeeeello 1
OK
127.0.0.1:6379> keys *
1) "hallo"
2) "hbllo"
3) "heeeeello"
4) "hello"
5) "key1"
-
匹配任意一个字符
127.0.0.1:6379> keys h?llo 1) "hallo" 2) "hbllo" 3) "hello" -
匹配任意多个字符
127.0.0.1:6379> keys h*llo 1) "hallo" 2) "hbllo" 3) "heeeeello" 4) "hello" -
匹配括号里的内容
127.0.0.1:6379> keys h[ab]llo 1) "hallo" 2) "hbllo" -
匹配非括号里面内容
127.0.0.1:6379> keys h[^e]llo 1) "hallo" 2) "hbllo" -
匹配括号里范围
127.0.0.1:6379> keys h[ab]llo 1) "hallo" 2) "hbllo"
EXISTS
-
该命令用来查询key 是否存在
exixts key [key...]
-
该命令可以在后面跟多个 key
-
返回查询到 key 的个数
-
时间复杂度位O(N) N为key 的个数
-
查询
127.0.0.1:6379> exists hello hallo (integer) 2
DEL
-
删除 key 以及对应的 value
del key [key...]
-
del 后面也可以跟多个 key
-
返回值表示删除 key 的个数
-
删除一个数据
127.0.0.1:6379> del hello (integer) 1 -
删除多个数据
127.0.0.1:6379> del hallo hbllo (integer) 2 -
删除不存在的数据
127.0.0.1:6379> del abc (integer) 0
EXPIRE
-
设置过期时间,单位秒
expire key second
-
expire 必须要是已经有了的 key
-
返回值为 1 表示设置成功,0 表示失败
-
但是 second 对于计算机来说时间太长,其实还有一个 pexpire 的单位为毫秒
-
设置过期时间
127.0.0.1:6379> expire hello 10 (integer) 1 -
为空 key 设置过期时间
127.0.0.1:6379> expire abc 10 (integer) 0
为已有的 key 设置过期时间返回 1,为没有的 key 设置过期时间返回 0,表示设置失败
而且设置成功后,等时间到期后,该key 会自动删除
TTL
-
查看过期时间,和 expire 对对应
ttl key
-
返回的单位是 秒
-
如果想要查看毫秒级的就是 pttl 也就是和pexpire 对应
-
返回值为剩余的过期时间,如果是 -1 表示没有设置过期时间,如果是 -2 表示没有该 key
-
设置过期时间
127.0.0.1:6379> expire hello 30 (integer) 1 -
查看过期时间
127.0.0.1:6379> ttl hello (integer) 25 -
查看没有设置的过期时间 key 的过期时间
127.0.0.1:6379> ttl key1 (integer) -1 -
查看没有 key 的过期时间
127.0.0.1:6379> ttl abc (integer) -2
redis 的过期策略
redis 的过期策略主要是两个方面:
-
定期删除
-
惰性删除
-
首先说这个惰性删除,惰性删除就是每当用户访问该数据的时候, redis 会进行一番检查,如果是过期的,那么 redis 就会删除掉该 key,然后返回 nil
-
定期删除就是,每隔一段时间 redis 就会抽取一部分数据进行检查过期时间,如果过期的话就会删除
-
为什么是一部分数据呢?因为 redis 是单线程的,如果数据量太大的话,那么就会是 redis 阻塞,导致其他的服务无法被处理,所以 redis 每次都抽取一部分数据进行检查
-
但是两个策略结合效果却也是一般
定时器策略
redis 过期策略还可以通过定时器来解决,但是这个定时器 redis 并没有实现,但是可以介绍一下如果使用定时器那么可以如何实现
基于优先级队列定时器
-
可以将所有的过期时间的 key 都放到一个优先级队列里面
-
优先级就是过期时间,过期时间越近,那么优先级越高
-
所以第一个元素一定是最先过期的,所以我们只需要检查第一个元素即可
-
而第一个元素也不一定要一直检查,可以隔一段时间检查一下
-
然后就可以分一个线程,让该线程来检查过期时间,如果发现过期时间还没到,则可以先让该线程挂起
基于时间轮的定时器
-
首先可以有一个循环队列,而循环队列里面的每一格代表一个一段时间的过期时间
-
每个格子里面可以保存一个链表,该链表里面的所有事件的过期时间都在该格子表示的时间范围
-
其中一个指针从循环队列特定位置开始,每隔一段时间(格子表示的时间)就向后走一个,然后检查里面的过期时间,过期就删除
-
遇到新的事件就查看该事件的过期事件,push 到对应的格子里
虽然 redis 并没有使用这两种方法,但是这两种方法也是比较高效的处理过期事件的方法
TYPE
-
返回 key 对应的 value 的类型
type key
-
返回 key 对应的 value 的类型
-
在 redis 里面 key 都是 string 类型
-
如果没有key返回 none
-
插入不同数据
127.0.0.1:6379> lpush key2 111 222 333 (integer) 3 127.0.0.1:6379> sadd key3 aaa bbb ccc (integer) 3 127.0.0.1:6379> hset key4 field1 value1 (integer) 1 -
查看不同数据类型
127.0.0.1:6379> type key1 string 127.0.0.1:6379> type key2 list 127.0.0.1:6379> type key3 set 127.0.0.1:6379> type key4 hash
相关文章:
redis 通用命令
目录 通用命令是什么 SET & GET keys EXISTS DEL EXPIRE TTL redis 的过期策略 定时器策略 基于优先级队列定时器 基于时间轮的定时器 TYPE 通过 redis 客户端和 redis 服务器交互。 所以需要使用 redis 的命令,但是 redis 的命令非常多。 通用命令…...
Pycharm配置及使用Git教程
文章目录 1. 安装PyCharm2. 安装Git3. 在PyCharm中配置Git插件4. 连接远程Gtilab仓库5. Clone项目代码6. 将本地文件提交到远程仓库6.1 git add6.2 git commit6.3 git push6.4 git pull 平时习惯在windows下开发,但是我们又需要实时将远方仓库的代码clone到本地&…...
CSS transition 过渡
1 前言 水平居中、垂直居中是前端面试百问不厌的问题。 其实现方案也是多种多样,常叫人头昏眼花。 水平方向可以认为是内联方向,垂直方向认为是块级方向。 下面介绍一些常见的方法。 2 内联元素的水平垂直居中 首先,常见内联元素有&…...
Unity中Shader的UV扭曲效果的实现
文章目录 前言一、实现的思路1、在属性面板暴露一个 扭曲贴图的属性2、在片元结构体中,新增一个float2类型的变量,用于独立存储将用于扭曲的纹理的信息3、在顶点着色器中,根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值;以及…...
Automotive 添加一个特权APP
Automotive 添加一个特权APP platform: android-13.0.0_r32 一. 添加一个自定义空调的app为例 路径:packages/apps/Car/MyHvac app内容可以自己定义,目录结构如下: 1.1 Android.bp package {default_applicable_licenses: ["Andr…...
自定义TimeLine
自定义TimeLine 什么是TimeLineData(数据)Clip(片段)Track(轨道)Mixer(混合) 什么是TimeLine 在 Unity 中,TimeLine(时间轴)是一种用于创建和管理…...
如何使用SQL系列 之 如何在SQL中使用WHERE条件语句
引言 在结构化查询语言 (SQL)语句中,WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点,每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…...
leetcode:1941. 检查是否所有字符出现次数相同(python3解法)
难度:简单 给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串。 示例 1: 输入:s…...
Echarts 各种点击事件监听
目录 一、鼠标事件1.1、左击1.2、双击1.3、右击1.4、右键双击1.5、中轴滚动二、时间轴2.1、时间轴监听三、拖动3.1、拖动事件一、鼠标事件 1.1、左击 chart.on(click, function(params)...
《智能网联汽车自动驾驶功能测试规程》
一、 编制背景 2018 年4 月12 日,工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》(以下简称《管理规范》),对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…...
NVIDIA CUDA Win10安装步骤
前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cuDNN 1. 安装前准备 在安装CUDA之前,需要完成以下准备工作: 确认你的显卡已经正确安装,在设备管理器中可以看…...
Elasticsearch、Kibana以及Java操作ES 的快速使用
docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…...
逐鹿人形机器人,百度、腾讯、小米卷起来
长期不温不火的人形机器人产业迎来新风口,技术显著提升、新品层出不穷、资本投资态度也逐渐好转。 8月18日,2023世界机器人大会博览会正式开放,全面展示了机器人行业的新技术、新产品和新应用。据悉,此次展会展览总面积达4.5万平…...
AndroidStudio推荐下载和配置
1、推荐下载链接 Download Android Studio & App Tools - Android Developers 2、gradle配置案例 // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven { url https://maven.aliyun.…...
mysql异常占用资源排查
通过执行日志与连接信息排查 查看是否开启日志记录 mysql> show global variables like %general%; --------------------------------- | Variable_name | Value | --------------------------------- | general_log | OFF | | general_log_file…...
requests 库:发送 form-data 格式的 http 请求 (python)
安装 requests-toolbelt !pip install requests-toolbeltdemo from requests_toolbelt import MultipartEncoder import requestsm MultipartEncoder(fields{query: """第一,向量化匹配是有能力上限的。搜索引擎实现语义搜索已经是好几年的事情了…...
行测图形推理规律(一)元素组成
题库:粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的,但是总结的规律应该是一样的。 规律并不唯一,题库的答案也只是参考答案,切勿当杠精,你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…...
【python爬虫】13.吃什么不会胖(爬虫实操练习)
文章目录 前言项目实操明确目标分析过程代码实现 前言 吃什么不会胖——这是我前段时间在健身时比较关注的话题。 相信很多人,哪怕不健身,也会和我一样注重饮食的健康,在乎自己每天摄入的食物热量。 不过,生活中应该很少有人会…...
深入理解联邦学习——联邦学习与现有理论的区别与联系
分类目录:《深入理解联邦学习》总目录 作为一种全新的技术,联邦学习在借鉴一些成熟技术的同时也具备了一定的独创性。下面我们就从多个角度来阐释联邦学习和其他相关概念之间的关系。 联邦学习与差分隐私理论的区别 联邦学习的特点使其可以被用来保护用…...
基于Python+DenseNet121算法模型实现一个图像分类识别系统案例
目录 介绍在TensorFlow中的应用实战案例最后 一、介绍 DenseNet(Densely Connected Convolutional Networks)是一种卷积神经网络(CNN)架构,2017年由Gao Huang等人提出。该网络的核心思想是密集连接,即每…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
