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"

相关推荐

  1. Redis简介数据类型

    2024-07-09 21:46:03       58 阅读
  2. Redis的基本命令数据类型

    2024-07-09 21:46:03       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:46:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:46:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:46:03       58 阅读
  4. Python语言-面向对象

    2024-07-09 21:46:03       69 阅读

热门阅读

  1. go内存返还系统相关代码

    2024-07-09 21:46:03       21 阅读
  2. 如何使用 Puppeteer 避免机器人检测?

    2024-07-09 21:46:03       24 阅读
  3. 面试经典 150 题

    2024-07-09 21:46:03       23 阅读
  4. MySQL8之mysql-community-common的作用

    2024-07-09 21:46:03       27 阅读
  5. 机器学习综述

    2024-07-09 21:46:03       23 阅读
  6. Qt | Qt常用类列举和说明

    2024-07-09 21:46:03       24 阅读
  7. chatgpt工作原理

    2024-07-09 21:46:03       26 阅读
  8. 在make类构建系统配置文件中定义函数宏

    2024-07-09 21:46:03       23 阅读
  9. lvs集群

    lvs集群

    2024-07-09 21:46:03      22 阅读
  10. 记录Linux安装go环境的一个坑

    2024-07-09 21:46:03       23 阅读