Redis八种数据类型详解

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis八种数据类型详解

1、基本使用

  1. 通过set 设key value 。通过get key 取对应的key 取value ,使用dbsize 查看当前数据库 数据个数。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79MQWmG7-1628215206449)(C:\Users\Meet\AppData\Roaming\Typora\typora-user-images\image-20201029155953379.png)]

  2. 通过 del key ... 可以删除多个key对应的value ,integer表示 删除成功数

    在这里插入图片描述

  3. exists key 判断对应的key是否存在,nil表示null

在这里插入图片描述

  1. expire key second 设置对应key的过期时间,ttl key 查看key过期没有,如果过期时间到了redis会移除过期key

在这里插入图片描述

  1. keys 查看当前数据库中,所有的key ,keys xxx 查看当前数据库中以xxx开头的key

    在这里插入图片描述

  2. 不同数据库数据是独立的,目前不能从其它数据库查数据

    select 数据库编号    ## 选择数据库

在这里插入图片描述

  1. flushall 清除所有数据库数据,flushdb清除当前数据库数据

    在这里插入图片描述

  2. move key index 将指定的key 转移到指定的数据库

    move name 1
  3. persist key 移除key的生存时间 使key永久生效

    redis> SET mykey "Hello"
    OK
    redis> EXPIRE mykey 10  # 为 key 设置生存时间
    (integer) 1
    redis> TTL mykey
    (integer) 10
    redis> PERSIST mykey    # 移除 key 的生存时间
    (integer) 1
    redis> TTL mykey
    (integer) -1
  4. mset 设置多个key value , mget 获取多个value,randomkey 随机取key

在这里插入图片描述

  1. type key 返回数据的 数据类型

    返回 key 的数据类型,数据类型有:

    • none (key不存在)
    • string (字符串)
    • list (列表)
    • set (集合)
    • zset (有序集)
    • hash (哈希表)

在这里插入图片描述

  1. select index 切换数据库

    select 1

2、字符串(String)

  1. getRange key start end 获取指定key指定范围的值 注意与java不同这是 左右都是闭包【】

在这里插入图片描述

  1. getset key value 先获取key的值,在设置value
    在这里插入图片描述
  2. setex (expire)key second value 设置key的存在时限。**setnx (not exists)key value** 设置一个数据库中没有的key, 如果该key存在设置失败(如果存在的,会覆盖原有的key,并给与新的生存时间)

在这里插入图片描述

  1. setRange key index newValue 为指定key的值修改数据 从index位置开始

在这里插入图片描述

  1. incr key 实现key值的自增 注意:key的值value 必须是数字,但还是以字符串保存

在这里插入图片描述

  1. incrBy key increment 对key值指定增量自增 , decrBy,decr 同理
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaV6UVxr-1628215676138)(C:\Users\Meet\AppData\Roaming\Typora\typora-user-images\image-20201029170131907.png)]
  2. append 实现数据追加

在这里插入图片描述

  1. set key value

    set user:1 {username:zhangsan,age:1}

3、哈希(hash) 命令(几乎以H开头)

redis hash 是一个(String类型的)field 和 value 的一个映射表,一般用来存储对象。(一个hash表 表示一个对象,一个对象中有多个 k,v值(f,v值))

Redis 中每个 hash 可以存储 2的32次方 - 1 个键值对(40多亿)

可以将hash理解成 一张表 表有多个键值对组成

  1. 创建一张 hash表作为key 里面封装这多个key value[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ef2B7xkR-1628215676144)(C:\Users\Meet\AppData\Roaming\Typora\typora-user-images\image-20201029174036653.png)]
  1. hdel key(表) field ,hget key field , hset key field value 从myhash表中删除field对应的值

在这里插入图片描述

  1. hexists key(表) field ,从hash表中 查看对应field字段是否存在,存在打印1,否则0

在这里插入图片描述

  1. hgetAll key(表) 从hash表中 获取所有的字段 和值

在这里插入图片描述

  1. hkeys key 获取表中所有的 field

在这里插入图片描述

  1. hLen key (表) 获取表中数据的数量

在这里插入图片描述

  1. HincrBy key(表) field increment 对指定hash表中某一字段 增量相加 没有key的话会自动创建哦

    HincrByFloat key field increment 对某一字段值 进行浮点增量增加

在这里插入图片描述

  1. Hmget 获取hash表中 多个指定字段的值

    Hmset 往hash表 中 设置多个值

在这里插入图片描述

  1. Hvals key 返回hash表中 所有字段的值

在这里插入图片描述

4、列表(list) 命令(几乎以L开头)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 2的32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

注意:虽然list 本质上是一个key 但是不能用 get lists 获取list中的值

  1. Blpop key timeout (list表) 从列表左边中弹出一个值,并指定超时时间,若列表中没有值,会阻塞列表,直到超时后才打印nil(null)/直到有元素 进入列表

在这里插入图片描述

  1. BRpop 同理

    在这里插入图片描述

  2. Lpush key(表) Rpush key 在表的左右两端,往表放值

    在这里插入图片描述

  3. Lpop Rpop 同理 取值

    在这里插入图片描述

  4. Llen key 获取list长度

在这里插入图片描述

  1. Lrange key start end 获取指定list范围中 的 数据

在这里插入图片描述

  1. Ltrim key start end 对指定范围的数据 修剪保留

在这里插入图片描述

  1. 剩下的具体看文档

5、集合(set)(命令以S开头)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

  1. sadd key (set集)value... 往set中存放多个值 , smembers key 输出set中全部的元素

在这里插入图片描述

  1. scard key 输出set中元素的数量

在这里插入图片描述

  1. sdiff key1 key2 比较两个集合的差异

    redis> SADD key1 "a"
    (integer) 1
    redis> SADD key1 "b"
    (integer) 1
    redis> SADD key1 "c"
    (integer) 1
    redis> SADD key2 "c"
    (integer) 1
    redis> SADD key2 "d"
    (integer) 1
    redis> SADD key2 "e"
    (integer) 1
    redis> SDIFF key1 key2
    1) "a"
    2) "b"
  2. sinter key 1 key2 取两个集合的交集

在这里插入图片描述

  1. sInterStore destination key1 key2 取两个集合的交集 存储在 destination中

    redis 127.0.0.1:6379> SADD myset1 "hello"
    (integer) 1
    redis 127.0.0.1:6379> SADD myset1 "foo"
    (integer) 1
    redis 127.0.0.1:6379> SADD myset1 "bar"
    (integer) 1
    redis 127.0.0.1:6379> SADD myset2 "hello"
    (integer) 1
    redis 127.0.0.1:6379> SADD myset2 "world"
    (integer) 1
    redis 127.0.0.1:6379> SINTERSTORE myset myset1 myset2
    (integer) 1
    redis 127.0.0.1:6379> SMEMBERS myset
    1) "hello"
  2. Spop key count 随机中set中取出count个 数据

    在这里插入图片描述

  3. sunion key1 key2 合并两个集合
  4. SRandMember key 【count】(可选) 随机从set中 返回几个数据 (不删除数据)

    在这里插入图片描述

  5. 补充看官网

6、有序集合(sorted set) (命令以Z开头)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

  1. zadd key score member... 向zset集合中 插入一些值,附带double/int数(用来比较大小排序)

在这里插入图片描述

  1. zrange key start end withScores 列出zset集合的指定位置元素 并携带分数
  2. zcard key 算出zset中的集合个数

在这里插入图片描述

  1. zrem key member 移除zset集合中的指定元素
redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

# 移除单个元素
redis 127.0.0.1:6379> ZREM page_rank google.com
(integer) 1

redis 127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
  1. 其它需求看文档

7、HyperLogLog 基数统计算法

什么是基数?(不重复的数据元素的个数)

​1、比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

为什么要用hyperLogLog 算法?

  1. HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。(占用空间小)
  2. 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

    pfadd key element 往key中放元素 ,注意:不能放重复的(与set/zset类似)

    pfcount key 计算key中的基数(不重复的数据个数)

    pfMerge hyper hyper1 hyper2 合并多个hyperloglog 成一个hyper

在这里插入图片描述

8、Geospatial 地理位置

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。 (要使用必先 导入对应的全部地理坐哦)
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。
  1. geoAdd 可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

    往china:city 表 中添加一些城市 和经纬度

在这里插入图片描述

  1. geoPos 返回 表中 指定名称的 经纬度

在这里插入图片描述

  1. geodist(distance) 返回表中两个地理位置的直线距离 可以指定单位

    在这里插入图片描述

  1. geoRadius key 经度 纬度 半径 单位 注意:是可以写多个条件的

在这里插入图片描述

在这里插入图片描述

  1. geoRadiusByMember 更geoRadius同样的用法 只不过不是经纬度定位中心 而是以表中成员来定位中心(不过好像不稳)
  2. geospatial底层采用的是zset 因此可以用对应的zset命令来删除对应的数据

在这里插入图片描述

  1. 删除 key

在这里插入图片描述

9、BitMaps (位图)

  1. 位图一般由二进制0,1表示,常用来显示两种状态。例如:打卡,未打卡。迟到,未迟到

    具体信息用时再查

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
8天前
|
存储 NoSQL Redis
redis常见数据类型
Redis 是一种基于内存的键值存储数据库,支持字符串、哈希表、列表、集合及有序集合等多种数据类型,每种类型均有特定用途与适用场景,提供丰富的命令操作,适用于高速数据访问与处理。
23 5
|
29天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
35 1
|
2月前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
39 1
|
3月前
|
存储 消息中间件 缓存
深入探析Redis常见数据类型及应用场景
深入探析Redis常见数据类型及应用场景
60 2
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4月前
|
NoSQL Java Redis
Redis5种数据类型
这篇文章介绍了Redis的五种数据类型:字符串、列表、集合、有序集合和哈希,并通过代码示例展示了如何在Spring框架中使用RedisTemplate操作这些数据类型。
Redis5种数据类型
|
4月前
|
存储 NoSQL Java
深入理解Redis数据类型Hashes原理
本文深入分析了Redis中的hashes数据类型,这是一种用于存储行记录的数据结构,允许一个key下存储多条记录。
深入理解Redis数据类型Hashes原理
|
4月前
|
存储 NoSQL 算法
深入理解Redis数据类型Zset原理
本文深入探讨了Redis中的Zset(有序集合)数据类型,它是一种可以存储排序功能的集合,其中每个元素都具有一个浮点型的score属性,用于根据score进行排序。
深入理解Redis数据类型Zset原理
|
4月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
4月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
212 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)