首页 > 数据库 >redis 数据结构篇

redis 数据结构篇

时间:2022-10-08 20:35:15浏览次数:56  
标签:元素 redis 列表 key 类型 数据结构 HSET

字符串类型

字符串类型是 redis 当中最基本的数据类型。它能存储任何形式的字符串,包括二进制数据。

也就是说可以存储图片。

一个字符串类型的键允许值的最大容量是 512 MB.

命令

赋值与取值

SET key value
GET key

递增

INCR key

INCRBY命令与INCR命令基本一样,只不过前者可以通过increment参数指定单次递增的数值

递减

DECR key
DECRBY key decrement

增加指定浮点数

INCRBYFLOAT key increment

哈希类型

赋值与取值

HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key field [field ...]
HGETALL key
redis> HSET car price 500
(integer) 1
redis> HSET car name BMW
(integer) 1
redis> HGET car name
"BMW"

HSET命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作(insert)还是更新操作(update)。当执行的是插入操作时(即之前字段不存在),HSET命令会返回1,当执行的是更新操作时(即之前字段已经存在),HSET命令会返回0。更进一步,当键本身不存在时,HSET命令还会自动建立它。

下面的命令:

HSET key field1 value1
HSET key field2 value2

等价于:

HMSET key field1 value1 field2 value2

相应地,HMGET命令可以同时获得多个字段的值:

redis> HMGET car price name
1) "500"
2) "BMW"

如果想获取键中所有字段和字段值却不知道键中有哪些字段时(如3.3.1节介绍的存储汽车对象的例子,每个对象拥有的属性都未必相同),应该使用HGETALL命令。

redis> HGETALL car
1) "price"
2) "500"
3) "name"
4) "BMW"

列表类型

列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(1),获取的元素越接近两端速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的(和从只有20个元素的列表中获取头部或尾部的10条记录的速度是一样的)。

与哈希类型键最多能容纳的字段数量相同,一个列表类型键最多能容纳232−1个元素。

set

set 和 list 的区别

存储空间: 232-1
有序? set 无序, list 有序
唯一? set 有唯一性, list 无。

命令

SADD key membet...

SADD命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。

因为在一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素。此命令的返回值是增加成功的元素个数(忽略的元素不计算在内)。

SREM key member...

获取集合中的所有元素

SMEMBERS key

redis> SMEMBERS letters
1) "b"
2) "a"

判断元素是否在集合中

SISMEMBER key member

判断一个元素是否在集合中是一个时间复杂度为O(1)的操作,无论集合中有多少个元素,SISMEMBER命令始终可以极快地返回结果。当值存在时SISMEMBER命令返回1,当值不存在或键不存在时返回0

集合间运算

获得集合中元素的数量

ZCARD key

获得指定分数范围内的元素个数

ZCOUNT key min max

redis> ZCOUNT scoreboard 90 100
(integer) 2

删除一个或多个元素

ZREM key member [member ...]

按照排名范围删除元素

z rem range by rank

ZREMRANGEBYRANK key start stop

流类型

流类型(stream)是Redis 5.0推出的新的数据类型。这个类型的推出是作为列表、有序列表以及4.4节会介绍的“发布/订阅”模式的补充。也正因如此,流类型或多或少地带有一些列表、有序列表和“发布/订阅”模式的特性,同时又有一些不同的地方。

(1)列表类型可以在头部和中间插入内容,而日志没有类似的需求,所以流类型也只支持在末尾追加内容[15]。不过流类型比列表类型强大的是,在插入一个新条目时可以自动为其生成一个在流中的唯一ID(类似于日志的行号)。这个ID可以用来进行查询等操作

(2)之前学习过,列表类型的每个条目只能是一个字符串。类似的还有哈希类型的字段值和有序集合类型的值,它们也都只能是字符串。而流类型的每个条目都可以是若干键值对,可以方便我们结构化地存储日志的详情。

此外,流类型的内部数据结构能够非常高效地利用内存。例如在一般的使用场景中,每一条记录的键值对结构都是相同的(上面的例子中,每个记录都包含了ua和ip这两个键值对),流类型会对相同结构的键名进行压缩,所以不需要为每条记录存储这个结构。此外,流类型的内部数据结构能够非常高效地利用内存。例如在一般的使用场景中,每一条记录的键值对结构都是相同的(上面的例子中,每个记录都包含了ua和ip这两个键值对),流类型会对相同结构的键名进行压缩,所以不需要为每条记录存储这个结构。

标签:元素,redis,列表,key,类型,数据结构,HSET
From: https://www.cnblogs.com/it-yyw/p/16770120.html

相关文章

  • Redis
    安装redis下载redis安装包并解压#下载,最好将redis-6.0.8.tar.gz移动到/opt目录下wgethttps://download.redis.io/releases/redis-6.0.8.tar.gz#解压tar-zxvfr......
  • 数据结构基础—线性表
    数据结构基础—线性表线性表是一种顺序存储结构其特点有:存在唯一的一个被成为”第一个”的数据元素存在唯一的一个被成为”最后一个”的数据元素除第一个之外,集合中的......
  • Ubuntu 下安装 redis 并且设置远程登陆和密码
    安装redissudoapt-getinstall-yredis-server更改配置sudovim/etc/redis/redis/redis.conf如果不知道怎么找直接在命令行模式下输入/{你要搜索的东西}......
  • 【数据结构】时间复杂度和空间复杂度的学习笔记(仅供学习交流使用)
    现在更关注的重点是时间复杂度时间复杂度具体怎么计算?所以时间复杂度是一个估算,看表达式中影响最大的哪一项。大O渐进表示法:例2:算下面的函数的时间复杂度结果为O(N)因为随着N......
  • 【数据结构】时间复杂度和空间复杂度的练习题(仅供学习交流使用)
    习题:解:异或:相同为0相异为1     0和任何数异或都是那个数本身因为这个原理所以两个数交换可以考虑使用异或,不需要考虑顺序代码实现:(++i和i++结果是一样得,如果取返回......
  • spring boot集成redis基础入门
    redis支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储。可以进行master-slave模式的数据备份更多redis相关文档请查看redis官方文......
  • 算法 玩转数据结构 2-6 使用泛型
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13411 1重点关注1.1泛型改造==转equals详见3  2课程内容见3 3......
  • 数据结构和算法介绍
     1.什么是数据结构和算法呢?   2.什么是数据结构   图书摆放规则  常见的数据结构     3.什么是算法?     补充 ......
  • JS数据结构与算法
     1.重要性什么是数据结构?数据结构和算法的重要性 2.线性结构2.1数组数组使用的API 2.2栈自定义栈栈的应用 2.3队列自定义队列优先级队列队列的应......
  • CentOS 7.9 安装 redis-6.2.0
    一、CentOS7.9安装redis-6.2.01 下载地址:https://download.redis.io/releases/redis-6.2.0.tar.gz  2安装gcc来进行编译Redis由C语言编写,所以需要系统中有......