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等人提出。该网络的核心思想是密集连接,即每…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...