【Redis-01】Redis的五种数据类型

news2024/11/29 4:49:46

Redis五种数据类型

  • 1.String
    • 1.1特点
    • 1.2命令
    • 1.3实例
  • 2.Hash
    • 2.1特点
    • 2.2命令
    • 2.3实例
  • 3.List
    • 3.1特点
    • 3.2命令
    • 3.3实例
  • 4.Set
    • 4.1特点
    • 4.2命令
    • 4.3实例
  • 5. SortedSet
    • 5.1特点
    • 5.2命令
    • 5.3实例

1.String

1.1特点

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m.

1.2命令

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

1.3实例

127.0.0.1:6379[6]> set str helloword
OK
127.0.0.1:6379[6]> get str
"helloword"
127.0.0.1:6379[6]> mset strs ljl age 10 score 89.1
OK
127.0.0.1:6379[6]> mget strs age score
1) "ljl"
2) "10"
3) "89.1"
127.0.0.1:6379[6]> incr age
(integer) 11
127.0.0.1:6379[6]> incrby age 3
(integer) 14
127.0.0.1:6379[6]> incrbyfloat score 10
"99.1"
127.0.0.1:6379[6]> get age
"14"
127.0.0.1:6379[6]> setnx age 15
(integer) 0
127.0.0.1:6379[6]> get age
"14"
127.0.0.1:6379[6]> setnx age0 14
(integer) 1
127.0.0.1:6379[6]> get age0
"14"
127.0.0.1:6379[6]> setex age0 10 15
OK
127.0.0.1:6379[6]> get age0
"15"
127.0.0.1:6379[6]> get age0
"15"
127.0.0.1:6379[6]> ttl ageo
(integer) -2
127.0.0.1:6379[6]> ttl age0
(integer) -2
127.0.0.1:6379[6]> setex age0 100 15
OK
127.0.0.1:6379[6]> ttl age0
(integer) 94
127.0.0.1:6379[6]> ttl age0
(integer) 92
127.0.0.1:6379[6]> ttl age0
(integer) 91
127.0.0.1:6379[6]> 

2.Hash

2.1特点

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
在这里插入图片描述

2.2命令

Hash的常见命令有:

  • HSET key field value:添加或者修改hash类型key的field的值

  • HGET key field:获取一个hash类型key的field的值

  • HMSET:批量添加多个hash类型key的field的值

  • HMGET:批量获取多个hash类型key的field的值

  • HGETALL:获取一个hash类型的key中的所有的field和value

  • HKEYS:获取一个hash类型的key中的所有的field

  • HINCRBY:让一个hash类型key的字段值自增并指定步长

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

2.3实例

127.0.0.1:6379[7]> hset h name ljl age 120 score 99.8
(integer) 3
127.0.0.1:6379[7]> hget h name
"ljl"
127.0.0.1:6379[7]> hmset h1 name lisi age 10 
OK
127.0.0.1:6379[7]> hmget h name age score
1) "ljl"
2) "120"
3) "99.8"
127.0.0.1:6379[7]> hgetall h
1) "name"
2) "ljl"
3) "age"
4) "120"
5) "score"
6) "99.8"
127.0.0.1:6379[7]> hkeys h
1) "name"
2) "age"
3) "score"
127.0.0.1:6379[7]> hincrby h score 10
(error) ERR hash value is not an integer
127.0.0.1:6379[7]> hincrbyfloat h score 10
"109.8"
127.0.0.1:6379[7]> hsetnx h sex 1
(integer) 1
127.0.0.1:6379[7]> 

在这里插入图片描述

3.List

3.1特点

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

3.2命令

List的常见命令有:

  • LPUSH key element … :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element … :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

3.3实例

127.0.0.1:6379[8]> lpush list  1  2  3  
(integer) 3
127.0.0.1:6379[8]> rpush list  4 5 6
(integer) 6
127.0.0.1:6379[8]> lpop list 1
1) "3"
127.0.0.1:6379[8]> rpop list 2
1) "6"
2) "5"
127.0.0.1:6379[8]> lrange list 0 2
1) "2"
2) "1"
3) "4"
127.0.0.1:6379[8]> blpop list a 100
1) "list"
2) "2"
127.0.0.1:6379[8]> lrange list 0 2
1) "1"
2) "4"
127.0.0.1:6379[8]> blpop list1 1000
1) "list1"
2) "5"
(37.92s)
127.0.0.1:6379[8]> blpop list list1 100
1) "list"
2) "1"
127.0.0.1:6379[8]> 

在这里插入图片描述

4.Set

4.1特点

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序

  • 元素不可重复

  • 查找快

  • 支持交集、并集、差集等功能

4.2命令

Set的常见命令有:

  • SADD key member … :向set中添加一个或多个元素
  • SREM key member … : 移除set中的指定元素
  • SCARD key: 返回set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于set中
  • SMEMBERS:获取set中的所有元素
  • SINTER key1 key2 … :求key1与key2的交集
  • Sdiff key1 key2 … :求key1与key2的差集
  • Sunion key1 key2 … :求key1与key2的并集
    在这里插入图片描述

4.3实例

127.0.0.1:6379[9]> sadd zs ls ww zl
(integer) 3
127.0.0.1:6379[9]> sadd ls ww mz eg
(integer) 3
127.0.0.1:6379[9]> srem zs ls
(integer) 1
127.0.0.1:6379[9]> scard zs
(integer) 2
127.0.0.1:6379[9]> sismember zs ls
(integer) 0
127.0.0.1:6379[9]> sismember zs ww
(integer) 1
127.0.0.1:6379[9]> sinter zs ls
1) "ww"
127.0.0.1:6379[9]> sdiff zs ls
1) "zl"
127.0.0.1:6379[9]> sunion zs ls
1) "ww"
2) "mz"
3) "zl"
4) "eg"
127.0.0.1:6379[9]> 

在这里插入图片描述

5. SortedSet

5.1特点

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

5.2命令

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member

  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

5.3实例

127.0.0.1:6379[10]> zadd sortedSet 85 jack 89 rose 90 tom 75 jerry
(integer) 4
127.0.0.1:6379[10]> zrem sortedSet rose
(integer) 1
127.0.0.1:6379[10]> zscore sortedSet jerry
"75"
127.0.0.1:6379[10]> zrank sortedSet tom
(integer) 2
127.0.0.1:6379[10]> zcard sortedSet 
(integer) 3
127.0.0.1:6379[10]> zcount sortedSet 80 90
(integer) 2
127.0.0.1:6379[10]> zincrby sortedSet 10 jack
"95"
127.0.0.1:6379[10]> zrange sortedSet 80 100
(empty array)
127.0.0.1:6379[10]> zrange sortedSet 0 1
1) "jerry"
2) "tom"
127.0.0.1:6379[10]> zrange sortedSet 0 3
1) "jerry"
2) "tom"
3) "jack"
127.0.0.1:6379[10]> zrangeByscore sortedSet 80 100
1) "tom"
2) "jack"
127.0.0.1:6379[10]> zrevrange sortedSet 0 3
1) "jack"
2) "tom"
3) "jerry"
127.0.0.1:6379[10]> zrevrangebyscore sortedSet 80 100
(empty array)
127.0.0.1:6379[10]> zrevrangebyscore sortedSet 100 80
1) "jack"
2) "tom"
127.0.0.1:6379[10]> 

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

harbor仓库故障排除

harbor仓库无法用docker login登录,一直报x509: cannot validate certificate for 172.17.10.29 because it doesn’t contain any IP SANs 1、检查docker和harbor的服务是否启动 [rootk8s-harbor harbor]#systemctl status harbor.service [rootk8s-harbor harbo…

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

作者:庄宇 以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革,其正迅速成为全世界数据中心的统一 API。 为了保证业务持续稳定、用户访问不中断,高可用、高弹性等能力是应用架构设计不变的追求,多集群架构天然具备…

控制对文件访问

控制对文件访问 Linux文件权限 权限文件影响目录影响r读取文件内容列出目录内容w更改文件内容创建删除目录文件x作为命令执行目录可以变成当前工作目录 命令行管理文件系统权限 更改文件和目录权限 chmod chmod WhoWhatWhich file|directoryWho (u,g,o,a代表用户&#xff…

抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵账号管理系统

前言: 抖音seo源码,抖音矩阵系统源码搭建,抖音矩阵同步分发。抖音seo源码部署是需要对接到这些正规接口再来做开发的,目前账号矩阵程序开发的功能,围绕一键管理多个账号,做到定时投放,关键词自动…

C# 提示:无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

今天再调试程序时发现程序再笔记本上运行正常,然而拷贝到客户主机上之后出现了(System.DllNotFoundException: 无法加载 DLL“msc.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。)的问题,经过再三调试, …

python编程语言之数据类型

python数据类型 https://draw.io/ 画图 str 序列操作 字符串属于序列类型,所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引、下标)访问它们…

6.3.3 利用Wireshark进行协议分析(三)Wireshark基本操作

6.3.3 利用Wireshark进行协议分析(三) 一、启动Wireshark界面 如图 从上到下依次是 标题栏菜单栏工具栏过滤栏捕获窗口,在该区域用户可以选择网络接口,设置捕获选项 Wireshark允许用户将捕获到的数据包信息保存在指定的文件中…

ESD门禁闸机管理系统如何适应不同场景及需求

ESD门禁闸机是一种用于控制进出门禁区域的设备。ESD是英文Electrostatic Discharge的缩写,意指静电放电。该门禁闸机主要用于防止静电对敏感设备和产品造成的损害。 ESD门禁闸机具有以下功能和特点: 1. 静电防护:ESD门禁闸机使用特殊的材料…

前端Vue uni-app App/小程序/H5 通用tree树形结构图

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

【源码解析】一张图了解spring内部原理

从Spring框架流程上来看主要包含的是Bean对象的配置,读取配置,Bean工厂管理,构建对象。

Panabit iXCache后台命令执行

在我们短促而又漫长的一生中,我们在苦苦地寻找人生的幸福,可幸福往往又与我们失之交臂。当我们为此而耗尽宝贵的青春年华,皱纹也悄悄地爬上了眼角的时候,我们或许才能稍稍懂得生活实际上意味着什么。 漏洞描述 Panabit iXCache指…

三、图形化界面工具DataGrip

一、DataGrip软件下载 1、官网下载 官网地址:https://www.jetbrains.com/zh-cn/ 拉到主页面的最下面: 2、下载DataGrip软件 二、软件安装 1、双击安装包 2、进入安装界面,点击【Next】 3、选择安装路径,之后点击【Next】 尽量不…

uni-app 小程序 uni.showToast字数超过两行自动省略显示不全问题

如图: uni.showToast({title: res.data.msg,icon: "none" });uni.showToast() 显示消息提示框,显示图标时, title 文本最多显示 7 个汉字长度,在不显示图标的情况下,大于两行不显示。 可以选择更换为使用…

霍格沃兹emp.dll文件丢失要怎么处理?快速修复emp.dll的方法

最近有朋友反映在他们玩霍格沃兹的时候,突然弹出一个emp.dll文件丢失的窗口,然后就玩不了游戏了,那么面对这种情况要怎么去解决呢?其实解决方法还是有挺多的,下面我们一起来了解一下吧。 一.emp.dll文件有什么作用 e…

(学习笔记-TCP连接断开)TCP四次挥手

TCP四次挥手过程 TCP断开连接是通过四次挥手实现的,双方都可以主动断开连接,断开连接后主机中的资源将被释放,四次挥手的过程如下: 客户端打算关闭连接时,会发送一个TCP首部FIN标志位为1的报文,也就是FIN报…

在gitlab中生成增量代码质量分析报告

作为管理者,你是否想在组员创建merge request时,生成代码质量分析报告,今天它来了: .gitlab-ci.yml: image: python:3.11flake8:allow_failure: true#rules: 这里不能加rules,否则无法正确生成质量报告# …

05-1_Qt 5.9 C++开发指南_Model/View结构基础(基本原理;数据模型;试图组件;代理)

Model/View(模型/视图) 结构是 Qt 中用界面组件显示与编辑数据的一种结构,视图 (View)是显示和编辑数据的界面组件,模型 (Model) 是视图与原始数据之间的接口。Model/View 结构的典型应用是在数据库应用程序中,例如数据库中的一个数据表可以在…

如何使用ArcGIS Pro制作一张天府机场区位图

ArcGIS系列产品的重要功能之一就是制图,相较于ArcGIS, ArcGIS Pro在制图这块有很大的改进,用户可以连接上ArcGIS Online丰富的在线资源,感受到ArcGIS Pro强大的制图能力,但是在开始的时候可能会有些不习惯,因为在操作上…

C#在工业自动化领域的应用前景如何?

在2021年,C#与工业自动化已经开始结合,并且这种趋势有望在未来继续发展。C#是一种功能强大的编程语言,其面向对象的特性、跨平台支持以及丰富的类库和工具,使其成为在工业自动化领域应用的有力工具。 我这里刚好有嵌入式、单片机…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第三十天 30/50 连续子数组的最大和【dp】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…