【Redis | 第二篇】Redis的五种数据类型和相关命令

news2024/11/19 11:27:57

文章目录

  • 2.Redis的数据类型和相关命令
    • 2.1常用数据类型
    • 2.2特性和用途
      • 2.2.1字符串(String)
      • 2.2.2哈希(Hash)
      • 2.2.3列表(List)
      • 2.2.4集合(Set)
      • 2.2.5有序集合(Sorted Set)
    • 2.3小结
    • 2.4连接命令
    • 2.5字符串—keys命令(重要)
    • 2.6哈希—hash命令
    • 2.7列表—list命令
    • 2.8集合—set命令
    • 2.9有序集合—Sorted Set命令
    • 2.10通用操作

2.Redis的数据类型和相关命令

在这里插入图片描述

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

2.1常用数据类型

  1. 字符串(String):最基本的数据类型,可以存储任意二进制数据,以及普通的文本字符串。
  2. 哈希(Hash):包含键值对的无序散列,适合保存对象信息,每个键值对存储了字段和值之间的映射关系。
  3. 列表(List):按照插入顺序排序的字符串元素列表,支持在列表的两端进行插入、删除、获取等操作,可实现栈和队列的功能。
  4. 集合(Set):无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素。
  5. 有序集合(Sorted Set):与集合类似,但每个元素都关联着一个分数(score)用于排序,可以按分数范围或成员值获取元素。

注意:Redis的数据类型,是指**value的数据类型,而Key普遍都是字符串类型**

2.2特性和用途

2.2.1字符串(String)

  • 特点:

    • string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
    • string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
    • string 类型的值最大能存储 512MB
  • 用途:字符串常用于缓存、计数器、分布式锁等场景。可以用于存储简单的键值对数据,或者用作复杂的数据结构的序列化存储。

  • 实战:将字符串用于存储较大的值时,要注意数据大小的限制。合理利用字符串操作函数,如使用 incr 自增计数器,或使用 append 追加字符串值。

  • 举例

    redis 127.0.0.1:6379> SET aaaa "菜鸟教程"
    OK
    redis 127.0.0.1:6379> GET aaaa
    "菜鸟教程"
    

2.2.2哈希(Hash)

  • 特性:哈希类型是一个键值对的无序散列表,适合存储对象的多个属性。哈希可以嵌套多层,支持单独的字段的读取、更新和删除操作

  • 用途:哈希常用于存储和操作对象的属性,如用户信息、文章信息等。可以减少键名的冗余,提高数据结构的可读性和可维护性

  • 实战:使用哈希可以更好地组织复杂的数据结构,充分利用字段级别的读取和更新操作。可以使用 HSET 和 HMSET 分别设置单个和多个字段的值

  • 举例

    使用了 Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value

    redis 127.0.0.1:6379> HMSET aa field1 "Hello" field2 "World"
    "OK"
    redis 127.0.0.1:6379> HGET aa field1
    "Hello"
    redis 127.0.0.1:6379> HGET aa field2
    "World"
    

2.2.3列表(List)

  • 特性:列表是一个按照插入顺序排序的字符串元素集合,支持在列表的两端(头部为左边,尾部为右边)进行插入、删除和获取元素。元素可以重复,列表的长度可以动态变化。

  • 用途:列表常用于实现消息队列、任务队列、操作日志、聊天消息记录等。可以实现先进先出(FIFO)或后进先出(LIFO)的数据结构。

  • 实战:使用列表操作函数,如 LPUSH、RPUSH、LPOP、RPOP 可以方便地操作列表。在读取大型列表时,要注意时间复杂度和性能问题。

  • 举例:

    redis 127.0.0.1:6379> lpush aa redis
    (integer) 1
    redis 127.0.0.1:6379> lpush aa mongodb
    (integer) 2
    redis 127.0.0.1:6379> lpush aa rabbitmq
    (integer) 3
    redis 127.0.0.1:6379> lrange aa 0 10
    1) "rabbitmq"
    2) "mongodb"
    3) "redis"
    redis 127.0.0.1:6379>
    

2.2.4集合(Set)

  • 特性:集合是一个无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素等。

  • 用途:集合常用于去重、关注列表、标签、好友列表等场景。由于集合元素是无序的,可以快速进行成员检测和集合操作。

  • 最佳实战:使用集合的交集、并集、差集操作可以方便地进行数据筛选和计算。使用 SADD、SREM 进行成员添加和删除

  • 举例:

    redis 127.0.0.1:6379> sadd runoob redis
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob mongodb
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob rabbitmq
    (integer) 1
    redis 127.0.0.1:6379> sadd runoob rabbitmq
    (integer) 0
    redis 127.0.0.1:6379> smembers runoob
    
    1) "redis"
    2) "rabbitmq"
    3) "mongodb"
    

2.2.5有序集合(Sorted Set)

  • 特性:有序集合是一个与每个成员关联的浮点数分数(score),可用于对成员进行排序。支持按照分数范围或成员值获取元素。

  • 用途:有序集合常用于排行榜、计分系统、优先级队列等场景。可以按照分数进行排名和排序。

  • 最佳实战:利用有序集合的分数,可以快速进行成员的增删改查操作。使用 ZADD、ZREM 进行成员的添加和删除,使用 ZRANGE 和 ZREVRANGE 进行范围查询。

  • 举例:

    redis 127.0.0.1:6379> zadd runoob 0 redis
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 mongodb
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
    (integer) 1
    redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
    (integer) 0
    redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
    1) "mongodb"
    2) "rabbitmq"
    3) "redis"
    

2.3小结

类型简介特性场景
String(字符串)二进制安全可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M
Hash(字典)键值对集合,即编程语言中的Map类型适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)存储、读取、修改用户属性
List(列表)链表(双向链表)增删快,提供了操作某一段元素的API1==,最新消息排行等功能==(比如朋友圈的时间线) 2,消息队列
Set(集合)哈希表实现,元素不重复1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(有序集合)将Set中的元素增加一个权重参数score,元素按score有序排列数据插入集合时,已经进行天然排序1、排行榜 2、带权重的消息队列

2.4连接命令

#基本语法
#redis-clis

#远程服务连接redis命令
$ redis-cli -h host -p port -a password

2.5字符串—keys命令(重要)

  1. SET key value:设置指定 key 的值为给定的 value。
  2. GET key:获取指定 key 的值。
  3. DEL key:删除指定 key。
  4. INCR key:将指定 key 的值增加1。
  5. DECR key:将指定 key 的值减少1。
  6. APPEND key value:将指定 value 追加到指定 key 的值末尾。
  7. STRLEN key:返回指定 key 值的字符串长度。
  8. SETEX key seconds value:设置指定 key 的值,并设置过期时间(秒)。
  9. SETNX key value:只在指定 key 不存在时,设置 key 的值为给定的 value。
  10. GETSET key value:设置指定 key 的值,并返回旧值。
  11. MSET key1 value1 key2 value2 …:设置多个 key-value 对。
  12. MGET key1 key2 …:获取多个 key 的值。
  13. STRLEN key:返回指定 key 值的字符串长度。

2.6哈希—hash命令

  1. HSET key field value:设置哈希类型中指定 key 的 field 域的值为给定的 value。
  2. HGET key field:获取哈希类型中指定 key 的 field 域的值。
  3. HDEL key field1 field2 …:删除哈希类型中指定 key 的一个或多个 field 域。
  4. HEXISTS key field:检查哈希类型中指定 key 是否存在指定的 field 域。
  5. HGETALL key:获取哈希类型中指定 key 的所有 field 和 value。
  6. HKEYS key:获取哈希类型中指定 key 的所有 field。
  7. HVALS key:获取哈希类型中指定 key 的所有 value。
  8. HINCRBY key field increment:将哈希类型中指定 key 的 field 域的值增加指定的 increment 值。
  9. HMSET key field1 value1 field2 value2 …:设置哈希类型中指定 key 的多个 field 和 value
  10. HMGET key field1 field2 …:获取哈希类型中指定 key 的多个 field 的值。
  11. HLEN key:获取哈希类型中指定 key 的 field 数量。
  12. HSTRLEN key field:获取哈希类型中指定 key 的 field 域的字符串长度。

2.7列表—list命令

  1. LPUSH key value1 [value2 …]:将一个或多个值插入到列表的左侧(头部)。
  2. RPUSH key value1 [value2 …]:将一个或多个值插入到列表的右侧(尾部)。
  3. LPOP key:获取并删除列表左侧的第一个元素。
  4. RPOP key:获取并删除列表右侧的第一个元素。
  5. LLEN key:获取列表的长度。
  6. LRANGE key start stop:获取指定范围内的元素,包括 start 和 stop,索引从0开始。
  7. LINDEX key index:获取列表中指定索引位置的元素。
  8. LSET key index value:设置列表中指定索引位置的元素值。
  9. LREM key count value:从列表中删除指定个数的元素。
  10. LTRIM key start stop:修剪(按照索引范围)列表,只保留指定范围内的元素。
  11. RPOPLPUSH source destination:从源列表右侧弹出最后一个元素,并将其插入目标列表的左侧。
  12. BLPOP key1 [key2 …] timeout:从左侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。
  13. BRPOP key1 [key2 …] timeout:从右侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。

2.8集合—set命令

  1. SADD key member1 [member2 …]:向集合中添加一个或多个成员。
  2. SMEMBERS key:获取集合中的所有成员。
  3. SISMEMBER key member:判断指定成员是否存在于集合中。
  4. SCARD key:获取集合中的成员数量。
  5. SREM key member1 [member2 …]:移除集合中的一个或多个成员。
  6. SRANDMEMBER key [count]:从集合中随机获取一个或多个成员。
  7. SPOP key [count]:随机移除并返回集合中的一个或多个成员。
  8. SMOVE source destination member:将指定成员从一个集合移动到另一个集合。
  9. SUNION key1 [key2 …]:获取多个集合的并集。
  10. SINTER key1 [key2 …]:获取多个集合的交集。
  11. SDIFF key1 [key2 …]:获取多个集合的差集(属于第一个集合,但不属于其他集合)。
  12. SDIFFSTORE destination key1 [key2 …]:计算多个集合的差集,并将结果存储在指定的目标集合中。

2.9有序集合—Sorted Set命令

  1. ZADD key score1 member1 [score2 member2 …]:向有序集合中添加一个或多个成员,并指定对应的分数。
  2. ZRANGE key start stop [WITHSCORES]:按照分数从低到高的顺序,获取有序集合中指定范围内的成员。
  3. ZREVRANGE key start stop [WITHSCORES]:按照分数从高到低的顺序,获取有序集合中指定范围内的成员。
  4. ZRANK key member:获取有序集合中指定成员的排名(按照分数从低到高排序)。
  5. ZREVRANK key member:获取有序集合中指定成员的排名(按照分数从高到低排序)。
  6. ZSCORE key member:获取有序集合中指定成员的分数。
  7. ZCOUNT key min max:获取有序集合中分数范围内的成员数量。
  8. ZREM key member1 [member2 …]:从有序集合中移除一个或多个成员。
  9. ZINCRBY key increment member:将有序集合中指定成员的分数增加指定的增量值。
  10. ZUNIONSTORE destination numkeys key1 [key2 …] [WEIGHTS weight1 [weight2 …]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的并集,并将结果存储在指定的目标有序集合中。
  11. ZINTERSTORE destination numkeys key1 [key2 …] [WEIGHTS weight1 [weight2 …]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的交集,并将结果存储在指定的目标有序集合中。

2.10通用操作

  1. SET key value:设置指定键的值。
  2. GET key:获取指定键的值。
  3. DEL key1 [key2 …]:删除一个或多个键。
  4. EXISTS key:检查指定键是否存在。
  5. KEYS pattern:查找与指定模式匹配的键集合。
  6. EXPIRE key seconds:设置键的过期时间,单位为秒。
  7. TTL key:获取键的剩余过期时间,单位为秒。
  8. INCR key:将键的值加一。
  9. DECR key:将键的值减一。
  10. INCRBY key increment:将键的值增加指定的增量。
  11. DECRBY key decrement:将键的值减少指定的增量。
  12. APPEND key value:将指定字符串追加到键的值末尾。
  13. HSET key field value:将哈希表中指定字段的值设置为指定值。
  14. HGET key field:获取哈希表中指定字段的值。
  15. HMSET key field1 value1 [field2 value2 …]:设置哈希表中多个字段的值。
  16. HMGET key field1 [field2 …]:获取哈希表中多个字段的值。
  17. HGETALL key:获取哈希表中所有字段和值。
  18. RPUSHX key value:将值插入到列表的右侧(尾部),仅当列表存在时。
  19. LPUSHX key value:将值插入到列表的左侧(头部),仅当列表存在时。
  20. PUBLISH channel message:将消息发布到指定的频道。
    在这里插入图片描述

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

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

相关文章

网络编程 24/3/4 作业

1、广播 发送端 #include <myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//设置当前套接字允许广播属性int broadcast1;if(setsockopt(sfd,SOL_SOCKET…

【IO】进程间通信

A程序代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <string.h> int main(int argc, const char *argv[]) {if(mkfifo…

MySQL面试题纯享版

基础内容 1、MySQL的架构分层 2、一条 SQL 查询语句的执行流程 3、如何查看 MySQL 服务被多少个客户端连接了&#xff1f; 4、 空闲连接会一直占用着吗&#xff1f; 5、MySQL 的连接数有限制吗&#xff1f; 6、 怎么解决长连接占用内存的问题&#xff1f; 7、执行器与存储引擎…

Java 并发编程 面试题及答案整理,最新面试题

Java中的volatile关键字有什么作用&#xff1f; volatile关键字在Java中的作用包括&#xff1a; 1、保证可见性&#xff1a; 确保变量的修改对其他线程立即可见。 2、防止指令重排&#xff1a; 防止编译器对操作进行重排序&#xff0c;保证代码的执行顺序。 3、非原子性&am…

xss.haozi.me:0x0B

<svg><script>(1)</script>

数仓实战——京东数据指标体系的构建与实践

目录 一、如何理解指标体系 1.1 指标和指标体系的基本含义 1.2 指标和和标签的区别 1.3 指标体系在数据链路中的位置和作用 1.4 流量指标体系 1.5 指标体系如何向上支撑业务应用 1.6 指标体系背后的数据加工逻辑 二、如何搭建和应用指标体系 2.1 指标体系建设方法—OS…

数电票又增新票种 百望云率先推出机动车数电票解决方案

经过两年多的试点推广&#xff0c;数电票工程已经覆盖全国大部分省区市&#xff08;含计划单列市&#xff09;&#xff0c;随着系统建设的深入&#xff0c;不仅是应用功能逐渐完善&#xff0c;对票种的支持也走向全面。 2023年11月天津市正式开启机动车数电票的开具功能&#x…

解决win10串口一直被占用

目录 问题描述解决方法 问题描述 串口设备一直被占用&#xff0c;换串口也没有用&#xff0c;永远都是串口正在被使用&#xff0c;甚至换硬件设备也不行&#xff0c;都快烦死了 解决方法 输入这个&#xff1a; 删除这个玩意&#xff0c;计算机\HKEY_LOCAL_MACHINE\SYSTEM\Cu…

数字逻辑与计算机组成

逻辑代数 按一定逻辑关系进行运算的代数 与普通代数相同的是&#xff1a;都是由变量 (逻辑变量)、常量 (逻辑常量) 和一些运算符组成的代数系统 与普通代数不同的是&#xff1a; &#xff08;1&#xff09;逻辑常量&#xff1a;0 和 1&#xff0c;不表示数值大小&#xff0…

FreeRTOS操作系统学习——FreeRTOS工程创建

FreeROTS工程创建 详细步骤 如无特殊情况&#xff0c;大部人都要配置为外部高速时钟 另外&#xff0c;本实验使用了FreeRTOS&#xff0c;FreeRTOS的时基使用的是Systick&#xff0c;而 STM32CubeMX中默认的HAL库时基也是Systick&#xff0c;为了避免可能的冲突&#xff0c;最…

停止Tomcat服务的方式

运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程&#xff0c;获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…

CentOS7 Zookeeper3.8.3 单节点安装

CentOS7 Zookeeper3.8.3 单节点安装 1、把压缩包丢tools里&#xff0c;进tools cd /tools2、解压到training tar -zxvf /tools/apache-zookeeper-3.8.3-bin.tar.gz -C /training3、进training cd /training4、重命名 mv apache-zookeeper-3.8.3-bin zookeeper5、进zookeep…

构建信息蓝图:概念模型与E-R图的技术解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

7.2.2 用坐标表示平移 教案设计及课堂检测设计

【学习目标】 1&#xff0e;掌握坐标变化和图形平移的关系&#xff0c;能用点的平移规律求点平移后的点的坐标&#xff0e; 2&#xff0e;会按要求画出平移后的图形&#xff0c;并写出顶点的坐标&#xff0e;

稀碎从零算法笔记Day5-LeetCode:多数元素

题型&#xff1a;数组、计数、排序、STL函数、查找众数 链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 题目描述 给定一个大小为 n …

二手手机管理系统|基于Springboot的二手手机管理系统设计与实现(源码+数据库+文档)

二手手机管理系统目录 目录 基于Springboot的二手手机管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户管理功能的实现界面 2、用户中心管理功能的实现界面 3、新闻信息管理功能的实现界面 4、商品收藏管理功能的实现界面 5、订单管理功能的实现界…

浅析扩散模型与图像生成【应用篇】(六)——DiffuseIT

6. Diffusion-based Image Translation using Disentangled Style and Content Representation 本文介绍了一种基于扩散模型的图像转换方法&#xff0c;图像转换就是根据文本引导或者图像的引导&#xff0c;将源图像转换到目标域中&#xff0c;如下图所示。   在图像转换中待…

Java 面试题及答案整理,最新面试题

Java中的内存模型是如何设计的&#xff1f; Java的内存模型主要包括堆、栈、方法区和本地方法栈几个关键部分&#xff1a; 1、堆&#xff08;Heap&#xff09;&#xff1a; 这是Java内存管理中最大的一块&#xff0c;被所有线程共享。在堆中主要存放对象实例和数组。 2、栈&…

「经验」在博途中 是否可以在 LAD与STL 语言之间进行切换

用惯了STEP7&#xff0c;准确来说是SIMATIC Manager进行编程开发的同学&#xff0c;在转战TIA portal后&#xff0c;通常会经历一段“晦涩”的过度期&#xff0c;包括指令库的微小变动、工作界面的大改等等。 又比如&#xff1a;“在博途中&#xff0c;怎么快速切换LAD与STL语…

7.1.3 Selenium的用法2

目录 1. 切换 Frame 2. 前进后退 3. 对 Cookies 操作 4. 选项卡管理(了解) 5. 异常处理 6. 反屏蔽 7. 无头模式 1. 切换 Frame 我们知道网页中有一种节点叫作 iframe&#xff0c;也就是子 Frame&#xff0c;相当于页面的子页面&#xff0c;它的结构和外部网页的结构完全…