Redis数据类型和数据队列

一.Redis数据类型

参考资料:http://www.redis.cn/topics/data-types.html

相关命令参考: http://redisdoc.com/

Redis 是一种基于内存的开源数据结构存储系统,支持多种数据类型,每种数据类型都有自己特定的操作命令。

  1. String(字符串)

    特点:最基本的数据类型,可以存储字符串、整数或者浮点数。
    用途:常用于缓存、计数器、计分等场景。
  2. Hash(哈希)

    特点:存储了键值对集合,适合存储对象。
    用途:存储和获取对象的多个字段值,比如存储用户信息、商品信息等。
  3. List(列表)

    特点:链表结构,可以包含多个字符串元素,支持栈和队列操作。
    用途:适合用于消息队列、最近联系人列表、新闻流等场景。
  4. Set(集合)

    特点:存储字符串的无序集合,元素唯一。
    用途:适合做唯一值的存储,比如用户的标签、点赞用户列表等。
  5. Sorted Set(有序集合)

    特点:和集合类似,但每个元素都关联一个分数(score),可以根据分数进行排序。
    用途:适合做排行榜、范围查询等,比如积分排行榜、最热门文章等。

1.字符串string

字符串是所有编程语言中最常见的和最常用的数据类型,而且也是redis最基本的数据类型之一,而且redis 中所有的 key 的类型都是字符串。常用于保存 Session 信息场景,此数据类型比较常用

格式·:SETkeyvalue [EX seconds] [PX milliseconds] [NX|XX]时间复杂度: O(1)

将字符串值 value 关联到 key 

如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
当 SET 命令对一个带有生存时间(TTL)的键进行设置之后,该键原有的 TTL 将被清除。

从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
EX seconds :将键的过期时间设置为 seconds 秒。执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。

PX milliseconds :将键的过期时间设置为 milliseconds 毫秒。执行 SET key value PX 

milliseconds 的效果等同于执行 PSETEX key milliseconds value 。

NX :只在键不存在时,才对键进行设置操作。执行 SET key value NX 的效果等同于执行 SETNX key value 。
XX :只在键已经存在时,才对键进行设置操作。

示例:

1.判断类型 type

type
TYPE key1  #判断类型

2.设置自动过期 ex

ex
SET title ceo ex 3#设置自动过期时间3s OK

3.key不存在时设置,相当于添加  setnx

4.修改(key需要存在)  xx    相当于update

5.删除key    del

6.批量设置多个key   mset

   批量获取多个key   mget

7.追加数据   append

8.返回字符串key对应值的字节数   strlen

9.判断key是否存在

10.查看超时时间

ttl key #查看key的剩余生存时间,如果key过期后,会自动删除

  • -1#返回值表示永不过期,默认创建的key是永不过期,重新对key赋值,也会从有剩余生命周期变成永不过期

  • -2#返回值表示没有此key

  • num #key的剩余有效期

11.重新设置key的过期时间

EXPIRE   重新设置过期时间

PERSIST    永远不过期

127.0.0.1:6379> set name cxk ex 20  #建立一个key,过期时间为20秒
OK
127.0.0.1:6379> ttl name
(integer) 19
127.0.0.1:6379> expire name 1000  #重新设置过期时间为1000秒
(integer) 1
127.0.0.1:6379> ttl name
(integer) 998
127.0.0.1:6379> persist name  #永远不过期
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> 

2.列表list

列表是一个双向可读写的管道,其头部是左侧,尾部是右侧,一个列表最多可以包含2^32-1(4294967295)个元素,下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,元素值可以重复,常用于存入日志等场景,此数据类型比较常用

  • 有序

  • 可重复

  • 左右都可以操作

生成列表并插入数据

命令解释 例子
lpush从左边添加数据 例子:lpush name zhou wu zheng wang
rpush从右边添加数据 例子: rpush car benz bmw
llen获取列表长度 例子: llen 列表名称
lindex获取单个元数 例子: lindex name 0 ; lindex name -1
lrange获取多个元素 例子: lrange name 0 3 第1个到第三个元素
lset修改列表元素 例子: lset name 2 feng 将name的第二个元素改为feng
lpop删除列表元素 例子: lpop name 删除左边第一个
rpop删除列表元素 例子: rpop name 删除右边第一个
ltrim对列表修剪, 例子: ltrim name 1 2 只留下编号为 1 2 的文件
del删除列表 例子:del name

LPUSH和RPUSH都可以插入列表

LPUSHkeyvalue [value …]
时间复杂度: O(1)
将一个或多个值 value 插入到列表 key 的表头

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头:比如说,对空列表
mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。

如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。

RPUSH key value [value …]
时间复杂度: O(1)
将一个或多个值 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 存在但不是列表类型时,返回一个错误。

示例:

新建列表

127.0.0.1:6379> lpush name zhou wang qiu sun
(integer) 4
127.0.0.1:6379> type name
list
127.0.0.1:6379> llen name
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "sun"
2) "qiu"
3) "wang"
4) "zhou"
#数据是从右往左添加的,所以看到的是sun开始

#从左往右边加 数据
127.0.0.1:6379>  rpush name xu wu zheng han
(integer) 8
127.0.0.1:6379> lrange name 0 -1
1) "sun"
2) "qiu"
3) "wang"
4) "zhou"
5) "xu"
6) "wu"
7) "zheng"
8) "han"

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

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

相关文章

Python 数据容器的对比

五类数据容器 列表,元组,字符串,集合,字典 是否能下标索引 支持:列表,元组,字符串 不支持:集合,字典 是否能放重复元素 是:列表,元组&#…

HTML5 学习笔记总结

1.1 什么是网页 1.2 什么是 HTML 1.3 网页总结 2.常用浏览器 3.Web 标准 3.1 为什么需要Web 标准 3.2 Web 标准(重点)

互联网医院系统,开发互联网医院设计哪些功能?

随着科技的进步和数字化转型的推动,互联网医院系统已成为现代医疗服务的重要组成部分。这一系统通过整合信息技术与医疗资源,为用户提供便捷、高效的医疗服务。以下是互联网医院系统的主要功能介绍。 1、在线咨询与诊断 互联网医院系统允许患者通过网络平…

南航秋招指南,线上测评和线下考试

南航秋招简介 南航作为国内一流的航空公司,对人才的需求量非常旺盛,每年也有很多专业对口的工作提供给应届毕业生,对于应届毕业生而言,一定要抓住任何一个应聘机会,并且在规定的范围内进行简历的提交,以便…

C++基础知识:数组,数组是什么,数组的特点是什么?一维数组的三种定义方式,以及代码案例

1.数组的定义: 数组,就是一个集合,里面存放了相同类型的数据元素 2.数组的特点: 特点1:数组中的每个数据元素都是相同的数据类型 特点2:数组是由连续的内存位置组成的 3. 一维数组定义方式 维数组定义的三种方式: 1.数据类型 …

C++相关概念和易错语法(17)(适配器模式、仿函数)

1.stack和queue stack和queue的相关接口如下: stack queue 我们发现不管是stack还是queue,它们都有push和pop,不区分push_back和push_front,这是由它们的入栈特定顺序特性决定的,并且它们都没有迭代器,st…

倒计时1天!飞思实验室暑期公益培训,7月10日不见不散

01培训背景 很荣幸地向大家宣布:卓翼飞思实验室将于7月10日正式开启为期两个月的暑期公益培训!本次培训为线上直播,由中南大学计算机学院特聘副教授,RflySim平台总研发负责人戴训华副教授主讲。 培训将基于“RflySim—智能无人集…

每日刷题(二分查找,匈牙利算法,逆序对)

目录 1.Sarumans Army 2.Catch That Cow 3.Drying 4.P3386 【模板】二分图最大匹配 5. Swap Dilemma 1.Sarumans Army 3069 -- Sarumans Army (poj.org) 这道题就是要求我们在给的的位置放入 palantir,每个 palantir有R大小的射程范围,要求求出最少…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

住宅代理、移动代理和数据中心代理之间的区别

如果您是一名认真的互联网用户,可能需要反复访问某个网站或服务器,可能是为了数据抓取、价格比较、SEO 监控等用例,而不会被 IP 列入黑名单或被 CAPTCHA 阻止。 代理的工作原理是将所有传出数据发送到代理服务器,然后代理服务器将…

UML 2.5图的分类

新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践 UML 2.5在UML 2.4.1的基础上进行了结构性的调整,简化和重新组织了 UML规范文档。UML规范被重新编写,使其“更易于阅读”,并且“尽可能减少前向引用”。 U…

Mock 测试技术

一、Mock 类框架的使用场景 在实际软件开发中,要进行测试的方法存在外部依赖(如 db,redis,第三方接口调用等),这些外部依赖可能存在各种问题,例如不稳定、缺乏数据、难以模拟等等,所…

C++中的多重继承和虚继承:横向继承、纵向继承和联合继承;虚继承

多重继承 A.横向多重继承: B.纵向多重继承: C.联合多重继承: 因为 single 和 waiter 都继承了一个 worker 组件,因此 SingingWaiter 将包含两个 worker 组件,那么将派生类对象的地址赋给基类指针将出现二义性 那么如何…

使用F1C200S从零制作掌机之debian文件系统完善NES

一、模拟器源码 源码:https://files.cnblogs.com/files/twzy/arm-NES-linux-master.zip 二、文件系统 文件系统:debian bullseye 使用builtroot2018构建的文件系统,使用InfoNES模拟器存在bug,搞不定,所以放弃&…

Git 快速上手

这个文档适用于需要快速上手 Git 的用户,本文尽可能的做到简单易懂 ❤️❤️❤️ git 的详细讲解请看这篇博客 Git 详解(原理、使用) 1. 什么是 Git Git 是目前最主流的一个版本控制器,并且是分布式版本控制系统,可…

k8s中port,targetPort,nodePort,containerPort的区别

一、说明 在 Kubernetes 中,port、targetPort、nodePort 和 containerPort 是用于定义服务(Service)和容器之间网络通信的不同参数。 它们各自的作用和含义如下: 1. port 定义:这是服务对外暴露的端口号。作用&#x…

树莓派_Pytorch学习笔记20:初步认识深度学习框架

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Python 版本3.7.3: ​ 本文很水,就介绍一下我以后的学习使用P…

【JavaEE】 简单认识CPU

🐵本篇文章将对cpu的相关知识进行讲解 一、认识CPU 下图是简略的冯诺依曼体系结构图 上图中,存储器用来存储数据,注意在存储器中都是以二进制的形式存储数据的,CPU就是中央处理器,其功能主要是进行各种算术运算和各种…

C++·模板进阶

1. 非类型模板参数 之前我们写的模板参数都设定class类型的,这个模板参数用来给下面的代码中的某些元素定义类型,我们管这种模板参数叫类型形参。非类型模板参数就是用一个常量作为模板的一个参数,在模板中可将该参数当作常量来使用&#xff…

tk Text文本框赋值,清空

import tkinter as tk# 创建主窗口 root tk.Tk() root.title("文本框内容赋值示例")# 创建一个Text小部件 text_area tk.Text(root, height10, width50) text_area.pack()# 将内容赋值给Text小部件 text_area.insert(tk.END, "这是文本框中的内容。\n")#…