redis命令 及 redis 常见的数据结构

文章目录

  • 一. 核心命令
    • 1. set
    • 2. get
  • 二. 全局命令
    • 1. keys
    • 2. exists
    • 3. del
    • 4. expire
    • 5. ttl
    • 6. type
  • 三. redis 常见的数据结构

一. 核心命令

1. set

set key value
key 和 value 都是string类型的
在这里插入图片描述
对于key value, 不需要加上引号, 就是表示字符串类型, 加上也可以
redis中, 不区分大小写

2. get

get key
在这里插入图片描述
如果key不存在, 返回nil, 就是null的意思
在这里插入图片描述

二. 全局命令

全局命令, 就是能够搭配任意一个数据结构来使用的命令

1. keys

keys pattern
pattern就是通过一些特殊符号(通配符), 来描述key的模样, 匹配上的key就能被查询出来
在这里插入图片描述
keys的时间复杂度是O(N)
在生产环境上, 一般会禁止使用keys命令, 尤其是keys *

  1. 办公环境
  2. 开发环境 后端程序开发的环境, 硬件配置高
  3. 测试环境 测试工程师使用的
    4.线上环境/生产环境 外界用户可以访问到的

2. exists

在这里插入图片描述

判断key是否存在, 返回key存在的个数(针对多个key是有用的)
时间复杂度: O(1)
redis组织这些key就是按照哈希表的方式来组织的

redis自身的这些键值对, 是通过哈希表的方式来组织的, redis具体的某个值, 又可以是多种数据结构
在这里插入图片描述

3. del

删除指定的key, 可以一次删除一个或多个
在这里插入图片描述
返回删除key的个数(针对多个key是有用的)
时间复杂度: O(1)
在这里插入图片描述
如果redis作为缓存, redis中存的是热点数据, 全量数据是在mysql中存着, 那么redis使用del, 删除几个key, 一般来说问题不大, 相比之下, 如果是mysql数据, 哪怕误删了一个数据, 都可能是影响很大的
如果redis作为数据库, 此时误删数据影响就大了

4. expire

给指定的key设置过期时间, 单位是秒, key存活超出这个指定的值, 就会被自动删除
必须是针对已经存在的key设置过期时间

在这里插入图片描述
(pexpire key 毫秒)

返回0设置失败, 返回1设置成功
时间复杂度: O(1)
在这里插入图片描述

5. ttl

time to live 查看当前key的过期时间还剩多少
在这里插入图片描述
(pttl key )
返回值: 剩余过期时间。-1 表示没有关联过期时间,-2 表示 key 不存在
时间复杂度: O(1)
在这里插入图片描述

redis 的 key 的过期策略是怎么实现的?
redis的整体策略是: 定期删除惰性删除 相结合
惰性删除: 假设key已经过期, 但暂时还没有删除, 后面如果有一次访问, 正好用好这个key, 于是这个访问就会让redis服务器触发删除key的操作, 同时再返回一个nil
定期删除: 每次抽取一部分, 进行验证过期时间, 保证验证的过程足够快
(因为redis是单线程的程序, 如果扫描过期key消耗的时间太多了, 就可能导致正常处理请求命令就阻塞了)
上述过期策略, 任然可能有很多过期的key被残留, redis又提供了一系列的内存淘汰策略

6. type

返回key对应value的数据类型
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三. redis 常见的数据结构

在这里插入图片描述
redis在底层实现这些数据结构的时候, 会在源码层面, 针对上述实现进行特定的优化(编码方式可能有变数), 达到节省时间/空间 的效果
同一个数据类型, 背后可能编码方式是不同的, 会根据具体场景优化
redis自动适应, 程序猿使用时是感觉不到的
在这里插入图片描述

  1. raw
    最基本的字符串, 底层就是一个byte数组在存放数据
  2. int
    当value是个整数的时候, 此时可能redis会直接使用int来存储数据
    redis通常也可以用来实现"计数"这样的功能
  3. embstr
    针对短字符串进行的特殊优化
  4. hashtable
    最基本的哈希表
  5. ziplist
    压缩列表, 在哈希表中元素比较少的时候, 可能会优化成ziplist
  6. linkelist
    链表
  7. ziplist
    压缩列表, 在列表中元素比较少的时候, 可能会优化成ziplist
    (从redis3.2开始, 引入了新的quicklist, 代替上面两个)
  8. hashtable
    最基本的哈希表
  9. inset
    集合里都是整数
  10. skiplist
    跳表, 也是链表, 不同于普通的链表, 每个节点上有多个指针域, 巧妙地搭配这些指针域的指向, 就可以做到, 从跳表上查询元素的时间复杂度是O(logN)
  11. ziplist
    压缩列表, 在列表中元素比较少的时候, 可能会优化成ziplist

object encoding mylist
可以查看底层的编码方式

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/480886.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨平台应用开发框架(4)----Qt(系统篇)

目录 1.Qt事件 1.事件来源 2.事件处理 3.按键事件 1.组合按键 4.鼠标事件 1.鼠标单击事件 2.鼠标释放事件 3.鼠标双击事件 4.鼠标移动事件 5.滚轮事件 5.定时器 1.QTimerEvent类 2.QTimer 类 3.获取系统日期及时间 6.事件分发器 7.事件过滤器 2.Qt文件 1.输入…

uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?

在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…

DM达梦管理工具拖出空白区块,无法关闭

1. 出现问题:DM达梦管理工具拖出空白区块,无法关闭。 2. 解决方法 新建查询页,把查询页拖到空白区块里,完全覆盖空白区块。之后空白区块会变成查询页,右上角会出现叉号,点击叉号关闭就行。 3. 后记 达梦…

DevExpress的web Dashboard应用

本文旨在从零开始创建一个包含dashboard的应用 一、前期准备 1、语言:C# 2、软件:Visual Studio 2019 3、框架:DevExpress19.2(付费)、ASP.NET(Web) 4、组件:dashboard 二、创建ASP.NET Web窗体仪表板应用程序 1、创建一个空的w…

【vue-router】Vue-router如何实现路由懒加载

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

go语言切片

切片 切片是一种数据结构,这种数据结构便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数 append 来实现的。这个函数可以快速且高效地增长切片。还可以通过对切片再次切片来缩小一个切片的…

2024年一级建造师考试成绩,即将公布!

一级建造师考试成绩一般在考试结束后3个月左右的时间公布! 根据官方通知,重庆、江苏、青海、江西、云南、湖南、福建、北京、山西、黑龙江等地在今年一建报名通知里提到:2024年一级建造师考试成绩预计于2024年12月上旬公布。考生可在这个时间…

基于Matlab的图像去噪算法仿真

中值滤波的仿真 本节选用中值滤波法对含有高斯噪声和椒盐噪声的图像进行去噪,并用Matlab软件仿真。 (1)给图像加入均值为0,方差为0.02的高斯噪声,分别选择33模板、55模板和77模板进行去噪 Matlab部分代码&#xff1…

交通流量预测:基于交通流量数据建立模型

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

嵌入式QT学习第4天:Qt 信号与槽

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章思维导图如下: 不使用 Qt Designer 的方式进行开发,用代码绘界面,可以锻炼我们的布局能力,和代码逻辑能力&#x…

多线程+线程池

普通线程的创建 三种创建方式实例: 多线程本质上是毫无关系的,执行顺序是不可预知的,但是由于callable方式创建的对象有返回值所以主函数在执行的时候,需要等待返回值回来才能继续执行其他线程,所以在这种状态下是…

mac访达打开终端

选择文件夹打开 选中文件夹,然后右键即可: 在当前文件夹打开 在访达的当前文件夹长按option键 左下角出现当前文件夹路径 右键即可打开终端

【模型剪枝】YOLOv8 模型剪枝实战 | 稀疏化-剪枝-微调

文章目录 0. 前言1. 模型剪枝概念2. 模型剪枝实操2.1 稀疏化训练2.2 模型剪枝2.3 模型微调总结0. 前言 无奈之下,我还是写了【模型剪枝】教程🤦‍♂️。回想当年,在写《YOLOv5/v7进阶实战专栏》 时,我经历了许多挫折,才最终完成了【模型剪枝】和【模型蒸馏】的内容。当时…

Django 路由层

1. 路由基础概念 URLconf (URL 配置):Django 的路由系统是基于 urls.py 文件定义的。路径匹配:通过模式匹配 URL,并将请求传递给对应的视图处理函数。命名路由:每个路由可以定义一个名称,用于反向解析。 2. 基本路由配…

单点登录原理

允许跨域–>单点登录。 例如https://www.jd.com/ 同一个浏览器下:通过登录页面产生的cookie里的一个随机字符串的标识,在其他子域名下访问共享cookie获取标识进行单点登录,如果没有该标识则返回登录页进行登录。 在hosts文件下面做的域名…

保持角色一致性!flux新模型redux用法(含模型与工作流)

​ 目录 redux模型是什么,能干啥? 用到的工具有哪些? 工具和模型文件在哪里下载? 整合包: 下载后需要分别放到指定目录: redux模型怎么用? 加载工作流 上传图片和输入提示词 生成结果…

FastAPI 跨域访问cors设置

问题发现 前端vue3写了个页面,调用后台一个服务,出现了跨域访问错误,截图如下: 示例代码如下: from typing import Unionfrom fastapi import FastAPI from pydantic import BaseModel import randomapp FastAPI()…

Admin.NET框架使用宝塔面板部署步骤

文章目录 Admin.NET框架使用宝塔面板部署步骤🎁框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 🎁框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…

音视频流媒体直播/点播系统EasyDSS互联网视频云平台介绍

随着互联网技术的飞速发展,音视频流媒体直播已成为现代社会信息传递与娱乐消费的重要组成部分。在这样的背景下,EasyDSS互联网视频云平台应运而生,它以高效、稳定、便捷的特性,为音视频流媒体直播领域带来了全新的解决方案。 1、产…

51单片机快速入门之中断的应用 2024/11/23 串口中断

51单片机快速入门之中断的应用 基本函数: void T0(void) interrupt 1 using 1 { 这里放入中断后需要做的操作 } void T0(void): 这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。 interrupt 1: 这是关键字和参…