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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

    move name 1
    
  2. 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
  1. 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不同这是 左右都是闭包【】
    在这里插入图片描述

  2. getset key value 先获取key的值,在设置value
    在这里插入图片描述

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

  4. setRange key index newValue 为指定key的值修改数据 从index位置开始
    在这里插入图片描述

  5. incr key 实现key值的自增 注意:key的值value 必须是数字,但还是以字符串保存
    在这里插入图片描述

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

  7. append 实现数据追加
    在这里插入图片描述

  8. 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)]

  2. hdel key(表) field ,hget key field , hset key field value 从myhash表中删除field对应的值
    在这里插入图片描述

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

在这里插入图片描述

  1. hgetAll key(表) 从hash表中 获取所有的字段 和值
    在这里插入图片描述

  2. hkeys key 获取表中所有的 field
    在这里插入图片描述

  3. hLen key (表) 获取表中数据的数量
    在这里插入图片描述

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

    HincrByFloat key field increment 对某一字段值 进行浮点增量增加
    在这里插入图片描述

  5. 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 在表的左右两端,往表放值

在这里插入图片描述

  1. Lpop Rpop 同理 取值

在这里插入图片描述

  1. 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中全部的元素
    在这里插入图片描述

  2. 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 取两个集合的交集
    在这里插入图片描述

  3. 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"
    
  4. Spop key count 随机中set中取出count个 数据

在这里插入图片描述

  1. sunion key1 key2 合并两个集合

  2. SRandMember key 【count】(可选) 随机从set中 返回几个数据 (不删除数据)

    在这里插入图片描述

  3. 补充看官网

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

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

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

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

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

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

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

  3. 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 表 中添加一些城市 和经纬度
    在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

  1. geoRadiusByMember 更geoRadius同样的用法 只不过不是经纬度定位中心 而是以表中成员来定位中心(不过好像不稳)

  2. geospatial底层采用的是zset 因此可以用对应的zset命令来删除对应的数据

在这里插入图片描述

  1. 删除 key

在这里插入图片描述

9、BitMaps (位图)

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

    具体信息用时再查

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Redis有以下几种数据类型:String、List、Set、Hash、ZSet、GEO、HyperLogLog。其中,String类型是由字节组成的序列,类似于其他编程语言中的字符串操作。List类型是一个有序的字符串列表,可以从两侧插入元素。Hash类型是一个字符串类型的字段和值的映射表,适合存储对象。Set类型是一个无序的字符串集合,每个成员都是唯一的。ZSet类型和Set类型类似,也是一个字符串集合,但是每个元素都会关联一个分数,用于排序。GEO类型用于存储地理位置信息,并提供相关操作,例如获取坐标、计算距离等。HyperLogLog类型用于进行基数估计,即估计集合中不重复元素的个数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Redis常见的5种不同的数据类型详解](https://blog.csdn.net/qq_27828675/article/details/109513907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【Redis7学习日记】—— Redis十大数据类型](https://blog.csdn.net/qq_61323055/article/details/129896694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鸽呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值