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

Redis常见类型及常用命令

目录

常见的数据类型

一、String类型

1、简介

2、常用命令

(1)新建key

(2)设值取值

​编辑

(3)批量操作

(4)递增递减

3、原子性操作

4、数据结构

二、list类型

1、list常用命令

2、数据结构

三、hash类型

1、常用命令

(1)给集合中放值: hset stu name lc

(2)取

(3)批量设置

(4)自增

(5)其他

2、数据结构

四、set类型

1、简介

2、常用命令

(1)存值

(2)取值

(3)判断是否有指定值

(4)scard 返回该集合的元素个数。

(5)两个集合差

3、数据结构

五、zset类型(Sorted set )

1、简介

2、常用命令

(1)将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

(2)返回key中的元素(从低到高),带withscores可以让分数一起和值返回到结果集

(3)查范围之间

3、数据结构


常见的数据类型

一、String类型

1、简介

String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

./redis-cli -a root --raw远程连接redis加--raw原始输出

2、常用命令

(1)新建key
set   <key><value>添加键值对 
示例: set k1 v1

    *NX:当数据库中key不存在时,可以将key-value添加数据库*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥*EX:key的超时秒数*PX:key的超时毫秒数 

NX:当key已存在,不能添加

XX:不出在不能用,覆盖原有的

EX:EX后跟秒数,超时后销毁

PX:key的超时毫秒数

(2)设值取值

setex <key><过期时间><value>#设置键值的同时,设置过期时间,单位秒。

 setex key 80 val  等同与  set key val EX 80
 setnx key value 不存在就插入(not exists)等同于 set key val NX    

取值

get <key>查询对应键值

示例:get name

以新换旧,设置了新值同时获得旧值:

 getset <key><value> 示例: getset name new_cxx  #给 name 的 value 设置新值,返回旧值
(3)批量操作

批量设置

mset key1 key2 批量设置key   
msetnx <key1><value1><key2><value2>  ..... 同时设置一个或多个 key-value 对,当且 仅当所有给定 key 都不存在 如果有一个存在就会不成功。
注意:有一个失败则都失败 

批量获取

 mget key1 key2 批量获取

setrange替换值,从指定的下标开始替换

getrange 查指定的下表之间的值

setrange <key><起始位置index><value> #从 index 开始替换 valuegetrange <key><起始位置><结束位置>

获得值的

strlen <key>

将给定的值 追加到原值的末尾

append <key><value>

(4)递增递减
incr <key>

将 key 中储存的数字值增1

只能对数字值操作,如果为空,新增值为1

示例:incr age

decr <key>

将 key 中储存的数字值减1

只能对数字值操作,如果为空,新增值为-1

示例:decr age #递减

自设步长

incrby / decrby <key><步长>将 key 中储存的数字值增减。自定义步长。

示例: incrby age 10 递增

示例: decrby age 10 递减

3、原子性操作

在多线程的环境下

当前执行的进程不会被其他的进程打断 原子性

原子性操作: redis

单线程

数据库中原子性 :全部成功/失败

4、数据结构

   String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.

内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时扩容都是加倍现有的空间(2倍),如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

二、list类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

1、list常用命令

rpush 右边开始添加

lpush  从左边开始添加

lrange key start end 从左边开始 0至-1代表取出所有

lpop/rpop <key> 从左边/右边吐出一个值

llen <key>获得列表长度

lindex key index

lrem <key><n><value> 从左边删除n个对应的value值(从左到右)示例: lrem k3 3 "test" #从左边开始删除k3里面的3个“test”
lset<key><index><value>将列表key下标为index的值替换成value

2、数据结构

List的数据结构为快速链表quickList。

首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。

(它将所有的元素紧挨着一起存储,分配的是一块连续的内存)。

当数据量比较多的时候才会改成quicklist。

因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。

Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

list:存储各种列表,可以做消息队列。如:粉丝列表,主播列表,消息列表等等

三、hash类型

hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

1、常用命令
(1)给集合中放值: hset stu name lc
hset <key><field><value>给<key>集合中的  <field>键赋值<value>

(2)取
hget <key1><field>      从<key1>集合<field>取出 value 

(3)批量设置

hmset <key1><field1><value1><field2><value2>... 批量设置hash的值

hget key field field field

(4)自增

 hincrby stud age 5

(5)其他
hexists<key1><field>查看哈希表 key 中,给定域 field 是否存在。 示例:hexists hhash username hkeys <key>列出该hash集合的所有field示例:hkeys hhash  hvals <key>列出该hash集合的所有value示例:hvals hhash hsetnx <key><field><value>将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 . 示例: hsetnx hhash id 100
2、数据结构

在Redis中,Hash是一种数据结构,用于存储键值对的集合,其中键和值都是字符串类型。Hash在Redis中是一个字典,可以存储多个键值对,并且支持对其中的某个键进行单独的读写操作。

以下是Redis Hash的主要特点和操作:

  1. 特点:

    • 存储键值对的集合。
    • 键和值都是字符串类型。
    • 适合存储对象或记录的字段和值。

四、set类型

1、简介

set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

2、常用命令
(1)存值

sadd se v1 v2 v3 v4

sadd <key><value1><value2> ..... 
将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略


(2)取值
smembers <key>取出该集合的所有值。

(3)判断是否有指定值
sismember <key><value>  判断集合<key>是否为含有该<value>值,有1,没有0

(4)scard <key> 返回该集合的元素个数。
(5)两个集合差
sdiff <key1><key2> 返回两个集合的差集元素(key1中的,不包含key2中的)

3、数据结构

Set数据结构是dict字典,字典是用哈希表实现的。

Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。

五、zset类型(Sorted set )

1、简介

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

2、常用命令

(1)将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zadd  <key><score1><value1><score2><value2>…

(2)返回key中的元素(从低到高),带withscores可以让分数一起和值返回到结果集
zrange <key><start><stop>  [WITHSCORES]   

(从高到低)

(3)查范围之间
zrangebyscore key min max [withscores]     [limit offset count]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 示例:zrangebyscore tzset 3 4 limit 0 2zrevrangebyscore key max min [withscores] [limit offset count]               
同上,改为从大到小排列。 

limit 0 2是把三行截成两行

3、数据结构

SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

zset底层使用了两个数据结构

(1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

对比有序链表和跳跃表,从链表中查询出51

类型

简介

特性

场景

String(字符串)

二进制安全

可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M

---

Hash(字典)

键值对集合,即编程语言中的Map类型

适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)

存储、读取、修改用户属性

List(列表)

链表(双向链表)

增删快,提供了操作某一段元素的API

1、最新消息排行等功能(比如朋友圈的时间线) 2、消息队列

Set(集合)

哈希表实现,元素不重复

1、添加、删除、查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作

1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐

Sorted Set(有序集合)

将Set中的元素增加一个权重参数score,元素按score有序排列

数据插入集合时,已经进行天然排序

1、排行榜 2、带权重的消息队列

相关文章:

Redis常见类型及常用命令

目录 常见的数据类型 一、String类型 1、简介 2、常用命令 &#xff08;1&#xff09;新建key &#xff08;2&#xff09;设值取值 ​编辑 &#xff08;3&#xff09;批量操作 &#xff08;4&#xff09;递增递减 3、原子性操作 4、数据结构 二、list类型 1、list常…...

实战纪实 | 某配送平台zabbix 未授权访问 + 弱口令

本文由掌控安全学院 - 17828147368 投稿 找到一个某src的子站&#xff0c;通过信息收集插件wappalyzer&#xff0c;发现ZABBIX-监控系统&#xff1a; 使用谷歌搜索历史漏洞&#xff1a;zabbix漏洞 通过目录扫描扫描到后台&#xff0c;谷歌搜索一下有没有默认弱口令 成功进去了…...

【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / c++代码 )

目录 关于堆的一些知识的回顾 数据结构&#xff1a;堆的特点 "down" 和 "up"&#xff1a;维护堆的性质 down up 数据结构&#xff1a;堆的主要操作 acwing-838堆排序 代码如下 时间复杂度分析 确实是在写的过程中频繁回顾了很多关于树的知识&…...

前端JavaScript篇之JavaScript有哪些数据类型,它们的区别?

目录 JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f;数据类型区别 JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f; 数据类型 JavaScript数据类型有&#xff1a; Undefined、Null、Boolean、Number、String、Array、Object、Symbol、BigInt… St…...

LeetCode---380周赛

题目列表 3005. 最大频率元素计数 3006. 找出数组中的美丽下标 I 3007. 价值和小于等于 K 的最大数字 3008. 找出数组中的美丽下标 II 一、最大频率元素计数 这题就是个简单的计数题&#xff0c;正常遍历统计数据即可&#xff0c;关键是你要会写代码逻辑。 代码如下&…...

archlinux 如何解决安装以后没有声音的问题

今天安装完archlinux以后发现看视频没声音 检查一下是否有 /lib/firmware/intel/sof 发现没有 如果你也是这样的话&#xff0c;可以尝试安装&#xff1a; sudo pacman -S sof-firmware 重启后再看看有没有声音&#xff1a; reboot 反正我有声音了...

什么是ORM思想?

1. ORM概念 ORM&#xff08;Object Relational Mapping&#xff09;对象关系映射模式&#xff0c;是一种技术&#xff0c;解决了面向对象与关系型数据库存互不匹配的现象。 ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 2. ORM由来 在软件开发的过程中&#xff0c;通常…...

设计接口时,为其添加签名鉴权---详细教程

一、何为签名 我们知道无论是restful api还是传统接口、亦或是其他形式接口的调用&#xff0c;接口签名都是非常重要的安全机制&#xff0c;它可以确保请求的发起者是经过认证和授权的客户端&#xff0c;同时也可以防止接口被攻击&#xff0c;请求参数被篡改等等。 用大白话来解…...

5G+物联网:连接万物,重塑智慧社区,开启未来生活新纪元,助力智慧社区的革新与发展

一、5G与物联网&#xff1a;技术概述与基础 随着科技的飞速发展&#xff0c;第五代移动通信技术&#xff08;5G&#xff09;和物联网&#xff08;IoT&#xff09;已经成为当今社会的热门话题。这两项技术作为现代信息社会的核心基础设施&#xff0c;正深刻地改变着人们的生活和…...

[反转链表] [合并两个有序链表][分割链表]

这里写目录标题 反转链表合并两个有序链表分割链表 反转链表 1、题目&#xff1a; 2.思路  思路1&#xff1a;建立一个newHead,取一个节点进行头插。具体做法如下&#xff01; 建立一个newHead(新头)&#xff0c;由于一个节点里面存的是下一个节点的地址&#xff0c;如果取…...

中文数据让LLM变笨?

我这里先贴一下论文的原链接&#xff1a; https://arxiv.org/abs/2401.10286 然后贴一下我翻译标注的下载链接&#xff1a;https://gitee.com/chatpaper/arXiv_top_chinese/blob/master/0801_top/%E4%B8%AD%E6%96%87%E4%BC%9A%E8%AE%A9LLM%E5%8F%98%E7%AC%A8%EF%BC%9F.pdf 先…...

【代码随想录】刷题笔记Day54

前言 差单调栈就结束代码随想录一刷啦&#xff0c;回家二刷打算改用python补充进博客&#xff0c;小涛加油&#xff01;&#xff01;&#xff01; 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 双指针法 中心点外扩&#xff0c;注意中心点可能有一个元素可能有两个…...

二.Winform使用Webview2在Demo1中实现地址简单校验

Winform使用Webview2在Demo1中实现地址简单校验 往期目录回顾添加对于的简单url验证提示通过上节和本节涉及到的函数有 往期目录 往期相关文章目录 专栏目录 回顾 通过一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址 我们已经知道了解决资源…...

从0开始学习C++ 第二十课:模板与泛型编程

第二十课&#xff1a;模板与泛型编程 学习目标&#xff1a; 掌握模板的基本语法和概念。学会使用函数模板来创建可重用的函数。学习如何定义类模板以实现数据结构的泛型。理解模板在C中提供的灵活性和强大功能。 学习内容&#xff1a; 模板的概念&#xff1a; 模板是C中支持…...

pcl之滤波器(一)

pcl滤波器 pcl一共是有十二个主要模块&#xff0c;详细了解可以查看官网。https://pcl.readthedocs.io/projects/tutorials/en/latest/#basic-usage 今天学习一下pcl的滤波器模块。 滤波器模块&#xff0c;官网一共是提供了6个例程&#xff0c;今天先来看第一第二个。 直通…...

java项目性能优化(MyBatis中开启查询缓存及flushCache与useCache的使用)

在java项目中&#xff0c;如果需要大量的DB查询&#xff0c;导致缓存过多&#xff0c;项目运行缓慢&#xff0c;可以设置在select查询时&#xff0c;添加二级缓存的清空。 如果没有去配置flushCache、useCache&#xff0c;那么默认是启用缓存的。 1&#xff0c;flushCache默认…...

Unity3D控制人物移动的多种方法

系列文章目录 unity知识点 文章目录 系列文章目录前言一、人物移动之键盘移动1-1、代码如下1-2、效果 二、人物移动之跟随鼠标点击移动2-1、代码如下2-2、效果 三、人物移动之刚体移动3-1、代码如下3-2、效果 四、人物移动之第一人称控制器移动4-1、代码如下4-2、效果 五、And…...

无人机打击激光器

激光器的应用非常广泛&#xff0c;涵盖了多个领域。以下是一些主要的激光器应用&#xff1a; 医疗领域&#xff1a;激光器在医疗行业中有着重要应用&#xff0c;比如用于激光手术&#xff08;如眼科手术&#xff09;、皮肤治疗、牙科治疗、肿瘤治疗等。 工业制造&#xff1a;在…...

Lingo数学建模基础

1.基本运算符 1.1算数运算符 1.2逻辑运算 #not# 否定操作数的逻辑值&#xff0c;一元运算符 #eq# 若两运算数相等&#xff0c;则为true,否则为false #ne# 若两运算数不相等&#xff0c;则为true,否则为false #gt# 若左边运算数严格大于右边&#xff0c;则为true,否则为…...

finalshell连接linux的kali系统

kali的ssh服务似乎是默认关闭的&#xff0c;笔者在玩CentOS系统时可以直接用finalshell完成连接&#xff0c;但kali不行&#xff0c;需要先手动开启ssh服务。 开启kali的ssh服务 输入【ssh start】命令开启ssh服务&#xff0c;可以用【ssh status】命令查看ssh状态&#xff0c…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)

崩溃、内存飙升、后台任务未释放、页面卡顿、日志丢失——稳定性问题&#xff0c;不一定会立刻崩&#xff0c;但一旦积累&#xff0c;就是“上线后救不回来的代价”。 稳定性保障不是某个工具的功能&#xff0c;而是一套贯穿开发、测试、上线全流程的“观测分析防范”机制。 …...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...

从0开始一篇文章学习Nginx

Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...

stress-ng 服务器压力测试的工具学习

一、stress-ng (下一代压力测试) 介绍 项目地址&#xff1a;https://github.com/ColinIanKing/stress-ng stress-ng 将以多种可选方式对计算机系统进行压力测试。它旨在锻炼计算机的各种物理子系统以及各种操作系统内核接口。stress-ng 的特点&#xff1a; 360 压力测试100 …...