redis五种数据结构

news/2024/4/19 11:32:18/文章来源:https://blog.csdn.net/suixinfeixiangfei/article/details/124591758

redis五种数据结构

  • 1. redis 其他相关
    • 1.1 redis 的安装
    • 1.2 redis 的持久化
    • 1.3 redis 配置文件
  • 2. redis 常见命令
    • 2.1 key
    • 2.2 设置 key 的生存时间或过期时间
  • 3. redis的5种常见的数据结构
    • 3.1 String
    • 3.2 list
    • 3.3 hash
    • 3.4 set
    • 3.5 zset(SortedSet(有序集合))
    • 3.6 更多操作命令参考
  • 4. 常见问题
    • 4.1 中文显示16进制编码问题
    • 4.2
  • 5.

1. redis 其他相关

1.1 redis 的安装

  • Linux下安装redis以及解决各种安装与启动问题.
    安装如果需指定安装目录,可以在make install 时,使用PREFIX 指定目录,如下:
    make install PREFIX=/susu/soft/mkinstall/redis/redis-6.0.4/
    
  • mac上安装redis的两种方法.

1.2 redis 的持久化

  • 简单谈谈 redis 持久化(RDB 和 AOF).

1.3 redis 配置文件

  • 简单说说redis配置文件中的一些配置.

2. redis 常见命令

2.1 key

  • keys
    语法:KEYS pattern
    查找所有符合给定模式 pattern 的 key ,其中 keys * 是匹配数据库内所有 key。如图:
    在这里插入图片描述
  • type
    语法:TYPE key,返回 key 所储存的值的类型
    在这里插入图片描述
  • del
    语法:DEL key [key ...],删除给定的一个或多个 key ,不存在的 key 会被忽略。
    在这里插入图片描述
  • EXISTS
    语法:EXISTS key 检查给定 key 是否存在。

2.2 设置 key 的生存时间或过期时间

  • 为给定 key 设置生存时间(即:设置过期时间:(expire time)
    expire key seconds
    
  • 查看还有多少秒过期(生存时间:(Time To Live, TTL)
    ttl key
    
    • 其中 -1 表示永不过期
    • 其中 -2 表示已经过期,已经过期的 key 会被自动删除
  • 简单实例:
    在这里插入图片描述

3. redis的5种常见的数据结构

  • 对于Redis数据库保存的键值对来说,键总是一个字符串对象,而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种。
类型常量对象的名称type命令输出
REDIS_STRING字符串对象string
REDIS_LIST列表对象list
REDIS_HASH哈希对象hash
REDIS_SET集合对象set
REDIS_ZSET有序集合对象zset

3.1 String

  • 常用命令:
    • 添加/修改数据:
      set key value
      
    • 获取数据:
      get key
      
    • 删除数据:
      del key
      
    • 添加/修改多个数据:
      mset key1 valueq key2 value2 …
      
    • 获取多个数据:
      mget key1 key2 …
      
    • 获取数据字符个数(字符串长度):
      strlen key
      
    • 追加信息到原始信息后部(如果原始信息存在就追加,否则新建):
      append key value
      
  • 如下:
    在这里插入图片描述

3.2 list

  • 常用命令如下:
    • lpush key value [value ...]
      将一个或多个值 value 插入到列表 key 的表头(即:从左边插入)。
      如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
      当 key 存在但不是列表类型时,返回一个错误。
    • rpush key value [value ...]
      将一个或多个值 value 插入到列表 key 的表尾(最右边)。

      如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。

      如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。

      当 key 存在但不是列表类型时,返回一个错误。

      rpush numbers 1
      rpush names "zhang san" "li si" "wangwu" "zhang san" "lily" "lucy"
      
    • LPUSHX key value
      将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。

      LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。

    • rpushx key value
      将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。

      和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

    • lrange key start stop
      返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

      下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

      你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

      lrange numbers 0 3
      
    • LREM key count value
      根据参数 count 的值,移除列表中与参数 value 相等的元素。

      count 的值可以是以下几种:

      count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
      count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
      count = 0 : 移除表中所有与 value 相等的值。

  • 简单测试例子如下:
    在这里插入图片描述

3.3 hash

  • 常用命令如下:
    • hset可以同时设置多个 field value

      HSET key field value
      

      将哈希表 key 中的域 field 的值设为 value 。

      如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。

      如果域 field 已经存在于哈希表中,旧值将被覆盖

      hset person_1 name "lucy"
      hset person_1 age 18 sex "女"
      
    • hget

      HGET key field
      

      返回哈希表 key 中给定域 field 的值。

      hget person_1 name
      
    • hgetall

      hgetall key
      

      返回哈希表 key 中,所有的域和值。

      在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。

      hgetall person_1
      
    • hkeys

      hkeys key
      

      返回哈希表 key 中的所有域。

      hkeys person_1
      
    • hvals

      hvals key
      

      返回哈希表 key 中所有域的值。

      hvals person_1
      
    • hexists

      hexists key field
      

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

      hexists person_1 name
      
    • HSETNX

      HSETNX key field value
      

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

      若域 field 已经存在,该操作无效

      如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令

    • hmset (注意:这个功能 hset 也是可以做到的)

      HMSET key field value [field value ...]
      

      同时将多个 field-value (域-值)对设置到哈希表 key 中。

      此命令会覆盖哈希表中已存在的域。

      如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。

      hmset dog_1 name "maidou" age 2
      
    • hmget

      HMGET key field [field ...]
      

      返回哈希表 key 中,一个或多个给定域的值。

      如果给定的域不存在于哈希表,那么返回一个 nil 值。

      因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。

      hmget dog_1 name age
      
  • 简单测试如下:
    在这里插入图片描述

3.4 set

  • 常用命令如下:
    • sadd

      SADD key member [member ...]
      

      将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略(即:添加的元素不重复)

      假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

      当 key 不是集合类型时,返回一个错误。

    • smembers

      SMEMBERS key
      

      返回集合 key 中的所有成员。

      不存在的 key 被视为空集合。

    • srem

      SREM key member [member ...]
      

      移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

      当 key 不是集合类型,返回一个错误。

      srem colour yellow
      
  • 简单例子如下:
    在这里插入图片描述

3.5 zset(SortedSet(有序集合))

常用命令如下:

  • zadd

    ZADD key score member [[score member] [score member] ...]
    

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

    如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

    score 值可以是整数值或双精度浮点数。

    如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

    当 key 存在但不是有序集类型时,返回一个错误。

    zadd pet_rank 3 "cat" 1 dog
    zadd pet_rank 2 bird
    
  • zrange

    zrange key start stop [WITHSCORES]
    

    返回有序集 key 中,指定区间内的成员。

    其中成员的位置按 score 值递增(从小到大)来排序。

    具有相同 score 值的成员按字典序(lexicographical order )来排列。

    如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

    下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
    你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推
    超出范围的下标并不会引起错误。
    比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。
    另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
    可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, …, valueN,scoreN 的格式表示。
    客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

    zrange pet_rank 0 -1 withscores
    zrange pet_rank 1 2 withscores
    zrange pet_rank 0 -2 withscores
    

    在这里插入图片描述

  • zrank

    ZRANK key member
    

    返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

    ==排名以 0 为底,也就是说, score 值最小的成员排名为 0 ==。

    使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名。
    在这里插入图片描述

3.6 更多操作命令参考

  • https://www.redis.net.cn/tutorial/3501.html.

4. 常见问题

4.1 中文显示16进制编码问题

  • 先看下面的例子

    127.0.0.1:6379> set user7_json {“userName”:”nicai”,”userAge”:”100”}
    OK
    127.0.0.1:6379> set user8_json '{"userName":"nicai","userAge":"100"}'
    OK
    127.0.0.1:6379> set nicai1 nicai
    OK
    127.0.0.1:6379> set nicai2 你猜
    

    在这里插入图片描述
    要想中文能正常显示,两种查看方法:

    • ① 常用的:连接的时候加上 --raw
      redis-cli -p 6379 -a redis --raw
      
      在这里插入图片描述
    • ② 来个稍微奇怪的写法,用 echo
      echo `redis-cli -a redis get nicai2`
      
      在这里插入图片描述

4.2

5.

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

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

相关文章

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…

《爆肝整理》保姆级系列教程python接口自动化(二十四)--unittest断言——中(详解)

简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言&#xff0c;这篇我们将通过结合和围绕实际的工作来进行unittest的断言。这里以获取城市天气预报的接口为例&#xff0c;设计了 2 个用例&#xff0c;一个是查询北京的天气&#xff0c;一个是查询 南京为例&#xf…

继电器的工作原理、构成和功能介绍

随着电力应用的不断发展&#xff0c;电气设备已经深入到我们的日常生活中&#xff0c;电气自动化技术大量使用在电力系统和生产型企业中&#xff0c;人们在享受电带来方便的同时要注意用电保护。继电器就是为了保护电路而生的&#xff0c;可以提高电路可靠性&#xff0c;保障用…

RabbitMQ实现死信队列

目录死信队列是什么怎样实现一个死信队列说明实现过程导入依赖添加配置编写mq配置类添加业务队列的消费者添加死信队列的消费者添加消息发送者添加消息测试类测试死信队列的应用场景总结死信队列是什么 “死信”是RabbitMQ中的一种消息机制&#xff0c;当你在消费消息时&#…

wafw00f 防火墙探测

kali机器自带防火墙探测工具wafw00&#xff0c;它可以通过发送正常以及不正常甚至包含恶意代码的HTTP请求&#xff0c;来探测网站是否存在防火墙&#xff0c;并识别防火墙的厂商及类型。安装&#xff1a;git clone https://github.com/EnableSecurity/wafw00f.git python setup…

Windows如何查看某个端口被占用的情况?

在工作中&#xff0c;有时会发现端口被占用的情况&#xff0c;导致软件报错或者服务无法启动等问题。在不知道具体哪个进程占用该端口号的情况下&#xff0c;我们可以用下面方法来查找。 举例&#xff1a;我现在发现8090端口被占用了&#xff0c;我现在需要找到并杀掉该进程。…

TCP状态转换

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP状态转换专栏&#xff1a;《Linux从小白到大神》《网络编程》 TCP状态转换示意图如下 针对上面的示…

高并发之读多写少的场景设计(用户中心)

用户中心是一个典型的读多写少系统&#xff0c;可以说我们大部分的系统都属于这种类型&#xff0c;而这类系统通过缓存就能获得很好的性能提升。并且在流量增大后&#xff0c;用户中心通常是系统改造中第一个要优化的模块&#xff0c;因为它常常和多个系统重度耦合&#xff0c;…

消息队列介绍和RabbitMQ的安装

1.消息队列 1.1 MQ的相关概念 1.1.1 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在…

高阶人生从在职读研开始——中国社科院与美国杜兰大学金融管理硕士

说到学历&#xff0c;好多人都不太在意&#xff0c;感觉学历没什么用。等升职学历被卡时&#xff0c;等你想考公学历达不到时&#xff0c;当你想跳槽更大的平台时&#xff0c;学历会显得尤其重要。当机会来临时&#xff0c;我们应该做好全足的准备&#xff0c;而不是眼瞅着机会…

SpringBoot相关操作

01-今日内容 Spring概述、快速入门SpringBoot配置SpringBoot整合 02-SpringBoot概述 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的…

金融信创步入快车道,应“需”而生的监控易运维方案为国产化助力

在我国“28N”信创三步走战略中&#xff0c;金融信创赫然名列其中&#xff0c;成为最早践行信创理论与实操的行业之一。截止到目前&#xff0c;金融信创渗透率业已仅次于党政部门&#xff0c;位列“8”大重点行业之首。超快的发展速度&#xff0c;让金融信创较早的步入“买方市…

浅谈模型评估选择及重要性

作者&#xff1a;王同学 来源&#xff1a;投稿 编辑&#xff1a;学姐 模型评估作为机器学习领域一项不可分割的部分&#xff0c;却常常被大家忽略&#xff0c;其实在机器学习领域中重要的不仅仅是模型结构和参数量&#xff0c;对模型的评估也是至关重要的&#xff0c;只有选择那…

前端开发:JS的节流与防抖

前言 在前端实际开发中&#xff0c;有关JS原生的节流和防抖处理也是很重要的点&#xff0c;关于底层和原理的掌握使用&#xff0c;尤其是在性能优化方面甚为重要。作为前端开发的进阶内容&#xff0c;在实际开发过程中节流和防抖通常都是项目优化的必要手段&#xff0c;而且也是…

机器学习笔记之近似推断(二)推断的核心思想

机器学习笔记之近似推断——推断的核心思想引言回顾&#xff1a;推断的目的与困难推断的目的推断的困难推断的核心思想——优化引言 上一节介绍了从深度学习的角度介绍了推断&#xff0c;并介绍了推断的目的和困难。本节将继续介绍推断的核心思想。 回顾&#xff1a;推断的目…

写给交互设计新手的信息架构全方位指南

目录什么是信息架构&#xff1f;通用方法日常工作可以关注的大神常用工具相关书籍什么是信息架构&#xff1f;信息架构是一个比众多其他领域更难定义的领域。内容策划由内容策划师来完成&#xff0c;交互设计由设计师来完成&#xff0c;而信息架构的完成与它们不同&#xff0c;…

达梦数据库(DM8)集成使用 Geotools(27.2)

达梦数据库&#xff08;DM8&#xff09;集成使用 Geotools&#xff08;27.2&#xff09;系统环境版本达梦 8 集成 Geotools 环境安装达梦8&#xff0c;请参照项目 pom.xml 添加 geotools 配置项目 pom.xml 添加达梦数据库驱动包Geotools 使用示例Geotools 连接数据库Geotools 空…

CLion Remote Debug CrossCompile

CLion远程Docker调试ROS(交叉编译)的设置步骤 准备一个好用的docker&#xff0c;运行起来&#xff08;Docker Image一定可以跑cuda和图形界面的&#xff0c;否则启动不了CLion&#xff0c;可以不用浪费时间看本教程了&#xff09; 在docker镜像中配置好ssh和rsync&#xff0c;…

测量 R 代码运行时间的 5 种方法

简介 平常在撰写论文时&#xff0c;会需要比较算法之间的计算时间。本篇文章给出几种测量 R 代码运行时间的方法。本文是小编学习过程中的笔记&#xff0c;主要参考博客1&#xff0c;2。 1. 使用 Sys.time() 小编通常使用 Sys.time() 函数来计算时间。首先记录当前运行时刻&…

数据结构与算法之Huffman tree(赫夫曼树 / 霍夫曼树 / 哈夫曼树 / 最优二叉树)

目录赫夫曼树概述定义构造赫夫曼树步骤代码实现赫夫曼树概述 HuffmanTree因为翻译不同所以有其他的名字&#xff1a;赫夫曼树、霍夫曼树、哈夫曼树 赫夫曼树又称最优二叉树&#xff0c;是一种带权路径长度最短的二叉树。所谓树的带权路径长度&#xff0c;就是树中所有的叶结点…