Redis的五种常用数据类型

在这里插入图片描述

1.字符串

String的数据结构是简单的Key-Value模型,Value可以是字符串,也可以是数字。

String是Redis最基本的类型,是二进制安全的,意味着Redis的string可以包含任何数据,比如jpg图片。

一个redis中字符串value最大是512M

常用命令

set 添加键值对

get 查询对应键值

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

strlen 获得值得长度

setnx 只有在key不存在时 设置key的值

incr

将key中存储的数字值增1

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

decr

将key中存储的数字减1

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

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

mset …

同时设置一个或多个键值对

mget …

同时获取一个或多个value

msetnx …

同时设置一个或多个key-value对,当且仅当所有给定key都不存在。(原子性操作)

getrange <起始位置><结束位置>

获得值得范围,包括起始和终止位置

setrange <起始位置>

用 覆写所存储的字符串值,从<起始位置>开始(索引从0开始)

setex <过期时间>

设置键值的同时,设置过期时间,单位秒

getset

设置新值同时获取旧值

2.列表List

在这里插入图片描述

单键多值
Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),底层实际是个双向链表
Lpush:表示的是向链表的左添加,也就是向链表的头添加
Rpush:表示的是向链表的右添加,也就是向链表的尾添加

常用命令

lpush/push… … 从左边/右边插入一个或多个值。

lpop/rpop 从左边/右边吐出一个值。值在键就在,值无键亡。

rpoplpush 从列表右边吐出一个值,插到列表左边。

lrange

按照索引下标获得元素(从左到右)

lrange mylist 0-1 0左边第一个,-1右边第一个,(0-1表示获取所有)

lindex 按照索引下标获得元素(从左到右)

llen 获得列表长度,

linsert before 在的后面插入插入值lrem

从左边删除n个value(从左到右)

lset 将列表key下标为index的值替换成value

数据结构

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

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

它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成

quicklist。

因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的

数据,结构上还需要两个额外的指针prev和next。

Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。

这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

3.集合Set

在这里插入图片描述
Redis 的集合是字符串的无序集合。
在Set集合当中,是不允许有重复的。
set是通过hash table实现的,可以进行添加、删除和查找。对集合我们可以取并集,交集,差集.

与list类似是一个列表的功能,特殊在于set可自动去重。Redis的Set是string类型的无序集合,它底层其实是一个value为null的hash表,添加,删除,查找复杂度都是O(1)

常用命令

sadd … 将一个或多个member元素加入到集合key中,已经存在的

member元素将被忽略

smembers 取出该集合的所有值。,

sismember判断集合是否为含有该值,有1,没有0scard返回

该集合的元素个数。,

srem …删除集合中的某个元素。,spop 随机从该集合中吐出一

个值。

srandmember 随机从该集合中取出n个值。不会从集合中删除。

smove value 把集合中一个值从一个集合移动到另一个集合·

sinter 返回两个集合的交集元素。

sunion 返回两个集合的并集元素。

sdiff 返回两个集合的差集元素(key1中的,不包含key2中的)

数据结构

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

内部使用hash结构,所有的value都指向同一个内部值

4.Zset

Redis 的有序集合类似于 Redis 的集合,字符串不重复的集合。

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

集合的每个成员都关联了一个评分(score ) ,这个评分( score )被用来按照从最低分到最高分的方

式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的。

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

元素。

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

表。

常用命令:

zadd … 将一个或多个member元素及其score值

加入到有序集key当中。

uzrangie [WITHSCORES] 返回有序集key 中,下标在

间的元素

带WITHSCORES,可以让分数一起和值返回到结果集。

vzrangebyscore key minmax [withscores] [limit offset count] 返回有序集key中,所有

score值介于min和max之间(包括等于min或 max )的成员。有序集成员按score值递增(从小到大)

次序排列。

zrevrangebyscore key maxmin [withscores] [limit offset count] 同上,改为从大到小排列。

zincrby 为元素的score加上增量.zrem 删除该集合

下,指定值的元素

zcount 统计该集合,分数区间内的元素个数zrank 返回该值

在集合中的排名,从0开始。

数据结构

zset是Redis提供的一个特别的数据结构,一方面等价于Java的数据结构Map<String,Double>,可

以给每一个元素value赋予一个权重score,另一方面又类似于TreeSet,内部的元素会按照权重

score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

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

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

到相应的score值

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

5.哈希Hash

在这里插入图片描述
Redis 的哈希是键值对的集合。
Redis 的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象,还有用户信息之类的,经常变动的信息。
Hash更适合用于对象的存储,String更适合字符串存储。

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

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长

度较短且个数较少时,使用ziplist,否则使用hashtable

常用命令

hset 给集合中的键赋值

hget 从集合取出value v

hmset … 批量设置hash的值

hexists 查看哈希表key 中,给定域field是否存在。“

hkeys 列出该hash集合的所有field

hvals 列出该hash集合的所有 valuee

hincrby 为哈希表key中的域field 的值加上增量1 -1

hsetnx 将哈希表key中的域field 的值设置为value,当且仅当域field不存在

数据结构

Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较

短且个数较少时,使用ziplist,否则使用hashtable。

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

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

相关文章

整理mongodb文档:副本集二

个人博客 整理mongodb文档:副本集二 个人博客&#xff0c;求推荐&#xff0c;本片内容较为乱 文章概叙 本文章主要讲在MongoDB的副本集中的一些注意点&#xff0c;主要是如何对seconadry进行数据操作&#xff0c;以及对更新数据的一些介绍 查看当前节点 上一集讲了关于搭…

B (1089) : DS单链表--合并

Description 假定两个单链表是递增有序&#xff0c;定义并实现以下函数&#xff0c;完成两个单链表的合并&#xff0c;继续保持递增有序 int LL_merge(ListNode *La, ListNode *Lb) Input 第1行先输入n表示有n个数据&#xff0c;接着输入n个数据 第2行先输入m表示有M个数据…

TSINGSEE青犀基于AI视频智能分析的客流统计分析场景方案

随着AI技术的不断发展与人类需求的不断提升&#xff0c;视觉目标的检测识别、智能监控在人们的生活中均有着广泛的应用。其中&#xff0c;智能安防视频监控是计算机视觉的重要应用领域&#xff0c;而AI客流统计则是近年来此领域大家关注热度较高的技术之一。 行业痛点 传统的客…

【抢先体验】开通使用 ChatGPT 语音版功能保姆级教程

大家好&#xff0c;我是苍何&#xff0c;一个土木转码的非典型程序员&#xff0c;也是一名技术管理者&#xff0c;同时也是 AI 应用的探索者。今天在视频号上看到和 ChatGPT 语音对话的视频&#xff0c;其声音的真实感太让人震撼了&#xff0c;于是也想去抢先体验一下 ChatGPT …

互联网项目有哪些值得做的

互联网已经融入了我们生活的方方面面&#xff0c;从电商巨头到科技创新&#xff0c;互联网带来的变革和便利无处不在。而在这个信息广泛的时代&#xff0c;越来越多的人开始思考如何利用互联网去创造价值。现如今&#xff0c;互联网项目的形式多种多样&#xff0c;有些让我们的…

python—如何提取word中指定内容

假设有一个Word&#xff0c;该Word中存在 “联系人” 关键字&#xff0c;如何将该Word中的联系人所对应的内容提取出来呢&#xff1f; 该Word内容如下所示&#xff1a; 要在给定的Word文档中提取出与"联系人"关键字对应的内容&#xff0c;可以使用Python的py…

详解链表oJ<反转链表,链表的中间节点及链表的回文>

hello&#xff0c;大家好&#xff0c;这里是Dark FlameMaster,今天和大家分享的是有关数据结构链表的几道题目&#xff0c;链表的中间节点&#xff0c;反转链表及判断链表是否为回文结构&#xff0c;放在一起讲解会印象更加深刻。 文章目录 一&#xff0c;链表的中间节点二&…

你的librosa和scikit-learn打架了吗?

被这个问题困扰好久&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我的原来版本librosa0.7.1 和 scikit-learn1.3.1 一直拆了按&#xff0c;按…

【力扣每日一题】2023.10.7 股票价格跨度

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一个数组表示不同时间的股票的价格&#xff0c;要我们按照顺序返回每天的股票价格跨度&#xff0c;价格跨度就是股票价格小于或等于…

Python3操作Redis最新版|CRUD基本操作(保姆级)

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 Win11查看安装的Python路…

C#练习题-构造函数

文章目录 前言题目习题1运行示例 习题2运行示例 参考答案习题1习题2 其他文章 前言 本篇文章的题目为C#的基础练习题&#xff0c;构造函数部分。做这些习题之前&#xff0c;你需要确保已经学习了构造函数的知识。 本篇文章可以用来在学完构造函数后加深印象&#xff0c;也可以…

HTTPS工作过程,国家为什么让http为什么要换成https,Tomcat在MAC M1电脑如何安装,Tomcat的详细介绍

目录 引言 一、HTTPS工作过程 二、Tomcat 在访达中找到下载好的Tomcat文件夹&#xff08;这个要求按顺序&#xff09; zsh: permission denied TOMCAT的各部分含义&#xff1a; 引言 在密码中一般是&#xff1a;明文密钥->密文&#xff08;加密&#xff09; &#xff…