Redis常用数据类型及其基础操作

一、Redis基本数据类型

  • redis常用的数据类型有五种,分别为:string,list,set,zset,hash
  • 最新版本redis还提供了bitmaps, hyperloglogs, geospatial indexes, streams
  • 共九种类型

1.String类型

  • string 是 redis 最基本的类型,你可以理解成一个 key 对应一个 value。
set k1 v1
get v1

插入与查找

2.list类型

  • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部,可以将其当做队列与栈使用。
lpush list v1
push list v2 v3
lrange list 0 10

在这里插入图片描述

3.set类型

  • Redis 的 Set 是 string 类型的无序集合。
sadd set v1
sadd set v2 v3 v4
smembers set
  • set插入元素不能重复
    在这里插入图片描述

4.zset类型

  • Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
  • zset的成员是唯一的,但分数(score)却可以重复。
zadd zset 0 v1
zadd zset 2 v2
zadd zset 1 v3
ZRANGEBYSCORE zset 0 10

在这里插入图片描述

5.hash类型

Redis hash 是一个key,value的键值对集合。

hmset map k1 v1 k2 v2
hmset map k3 v3
hget map k2

在这里插入图片描述

6.bitmaps类型

  • bitmaps位图不是实际的数据类型,而是在 String 类型上定义的一组面向位的操作。由于字符串是二进制安全的 blob,它们的最大长度为 512 MB,因此它们适合设置多达 2 32 个不同的位。

  • 位操作分为两组:恒定时间的单个位操作,例如将位设置为 1 或 0,或获取其值,以及对位组的操作,例如计算给定位范围内设置位的数量(例如,人口计数)。

  • 位图的最大优点之一是它们在存储信息时通常可以极大地节省空间。例如,在不同用户由增量用户 ID 表示的系统中,仅使用 512 MB 内存就可以记住 40 亿用户的单个位信息(例如,知道用户是否想要接收时事通讯)。

  • 使用SETBIT和GETBIT命令设置和检索位

> setbit key 10 1
(integer) 1
> getbit key 10
(integer) 1
> getbit key 11
(integer) 0

7.hyperloglogs类型

  • HyperLogLog 是一种用于计算唯一事物的概率数据结构(从技术上讲,这称为估计集合的基数)。通常,计算唯一项需要使用与要计算的项数成正比的内存量,因为您需要记住过去已经看过的元素,以避免对它们进行多次计数。但是,有一组算法可以用内存换取精度:您以带有标准误差的估计度量结束,在 Redis 实现的情况下,该标准误差小于 1%。该算法的神奇之处在于您不再需要使用与计数的项目数量成正比的内存量,而是可以使用恒定数量的内存!在最坏的情况下为 12k 字节,或者如果您的 HyperLogLog(从现在起我们将它们称为 HLL)看到的元素很少,则更少。

  • Redis 中的 HLL 虽然在技术上是一种不同的数据结构,但被编码为 Redis 字符串,因此您可以调用GET来序列化 HLL,并调用SET 将其反序列化回服务器。

  • 从概念上讲,HLL API 就像使用 Sets 来完成相同的任务。您会将 每个观察到的元素SADD放入一个集合中,并使用SCARD检查集合内元素的数量,这些元素是唯一的,因为SADD不会重新添加现有元素。

  • 虽然您并没有真正向HLL添加项目,因为数据结构只包含不包含实际元素的状态,API 是相同的:

  1. 每次看到一个新元素时,就使用PFADD将其添加到计数中。
  2. 每次你要检索的独特元素的当前近似加入与PFADD到目前为止,您使用PFCOUNT。
> pfadd hll a b c d
(integer) 1
> pfcount hll
(integer) 4

8.geospatial indexes类型

  • 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。

  • 该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:

  1. 有效的经度从-180度到180度。
  2. 有效的纬度从-85.05112878度到85.05112878度。
  • 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.15156960039"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis> 

9.streams类型

  • Stream 是 Redis 5.0 引入的一种新数据类型,它以更抽象的方式对日志数据结构进行建模。然而,日志的本质仍然完好无损:就像日志文件一样,通常以仅附加模式打开的文件实现,Redis Streams 主要是仅附加数据结构。至少在概念上,由于作为内存中表示的抽象数据类型,Redis Streams 实现了强大的操作来克服日志文件的局限性。

  • 尽管数据结构本身非常简单,但使 Redis 流成为最复杂的 Redis 类型的原因是它实现了额外的非强制性功能:一组阻塞操作,允许消费者等待生产者添加到流中的新数据,此外还有一个叫做Consumer Groups的概念。

  • 消费者组最初是由流行的消息传递系统 Kafka ™ 引入的。Redis 用完全不同的术语重新实现了一个类似的想法,但目标是相同的:允许一组客户端合作使用同一消息流的不同部分。

> XADD mystream * sensor-id 1234 temperature 19.8
1518951480106-0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值