首页 > 数据库 >Redis数据类型及其常用命令

Redis数据类型及其常用命令

时间:2024-03-10 21:13:48浏览次数:29  
标签:count ... 数据类型 元素 Redis value member key 常用命令

一、Redis字符串(String)

String是Redis最基本的类型,一个key对应一个value,它是二进制安全的(String可以包含任何数据,如jpg图片或者序列化的对象),

一个字符串value最多可以是512MB

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
  • EX以秒为单位设置过期时间

  • PX以毫秒为单位设置过期时间
  • EXAT设置以秒为单位的UNIX时间戳所对应的时间为过期时间(Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。)
  • PXAT设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间
  • NX键不存在时设置键值
  • XX键存在时设置键值
  • KEEPTTL保留设置前指定键的生存时间。之前设置了键的过期时间,如果用新的 value 值覆盖旧的并且不设置过期时间,新的 value 就会永不过期 
  • GET返回指定键原本的值,若键不存在时返回 nil 

(1)同时设置/获取多个键值对

  • MSET k1 v1 k2 v2...同时设置多个键值对
  • MGET k1 k2 k3...同时获取多个键值对
  • MSETNX k1 v1 k2 v2键不存在时设置键值对

(2)获取指定区间范围内的值(下标从0开始)

  • GETRANGE k1 0 -1获取 k1 的全部值;GETRANGE k1 x y获取下标从 x 到 y 的内容
  • SETRANGE k1 x abcd从下标 x 开始将 abcd 覆盖掉原内容

  

(3)数值增减(value必须是数字)

  • INCR keykey = key+ 1
  • INCRBY key xkey = key+ x
  • DECR keykey = key - 1
  • DECRBY key xkey = key- x
  • STRLEN key获取 key 的长度
  • APPEND key xxxx在 key 后加上 xxxx

(4)分布式锁

  • SETEX key 过期时间(秒) value创建键值对并设置过期时间

(5)getset(先get在set)

  • GETSET key newValue获取 key 的值再将 newValue 赋给 key,类似于SET key newValue GET

二、Redis列表(List)

底层是双向链表,可以在列表头部和尾部插入元素,最多可以包含2^32 - 1(4,294,967,295--超过40亿)个元素

  • LPUSH key 1 2 3 4 5在列表头部依次插入这些元素
  • RPUSH key 1 2 3 4 5在列表尾部依次插入这些元素
  • LRANGE key 0 -1从左向右遍历输出列表;LRANGE key start stop从 start 遍历输出到 stop
  • LPOP key移出并获取列表的第一个元素
  • RPOP key移出并获取列表的最后一个元素
  • LINDEX按照元素下标获取元素(下标从上向下数,从0开始)
  • LLEN获取列表的长度
  • LREM key 数字N value删除 N 个值等于 value 的元素
  • LTRIM key start stop截取指定范围内的元素在赋值给 key

  

  • RPOPPUSH 源列表 目的列表将源列表的最后一个元素移到目的列表的头部

  

  • LSET key index value将 key 中下标为 index 的元素赋值为 value
  • LINSERT key before | after 已有值 新值在 key 中已有值的前面或后面插入新值

三、Redis哈希表(Hash)

是一个String类型的field(字段)value(值)的映射表,每个hash可以存储2^32 - 1个键值对

Map<String, Map<Object, Object>>

  • HSET key field value [field value ...]
     HGET key field

  

  • HMSET已被弃用,使用 HSET 也可以一次设置多个键值对
  • HMGET key field [field ...]可以同时根据多个 fileld 获取 value
  • HGETALL key

  

  • HDEL key field [field ...]

  

  • HLEN key显示 key 中全部键值对的数量
  • HEXISTS key field查询 key 中是否有以 field 为 key 的键值对,1 为 true、0 为 false
  • HKEYS key类似于 Java 中的 keySet(),HVALS key类似于 Java 中的 values()
  • HINCRBY key field increment为 key 中的 field 的值加上 increment(整数),HINCRBYFLOAT key field increment加上指定的小数,也可以加整数
  • HSETNX key field value在 key 中 field 不存在时设置,成功返回 1,失败返回 0

四、Redis集合(Set)

Set是String类型的无序集合,集合成员是唯一的(无序无重复),集合对象的编码可以是 intset 或者 hashtable。Set是通过哈希表实现的,

添加、删除、查找的复杂度是O(1),集合中最大的成员数为2^32 - 1

  • SADD key member [member ...]向集合里添加数据,只插入不重复的数据,自动去重
  • SMEMBERS key查看集合中的全部元素
  • SISMEMBER key member判断 member 在不在集合中,1在、0不在
  • SREM key member [member ...]在集合中删除指定的元素,返回 0 表示没有该元素,返回 1 表示删除成功
  • SCARD key统计集合中元素的数量
  • SRANDMEMBER key [count]从集合中随机显示 count 个元素
  • SPOP key [count]从集合中随机弹出 count 个元素并删除
  • SMOVE source destination member将 source 中存在的 member 元素剪切到 destination中

集合运算

  • SDIFF key [key ...]A - B ,属于 A 但不属于 B 的元素
  • SUNION key [key ...]A ∪ B,取两者的并集(自动去重)
  • SINTER key [key ...]A ∩ B,取两者的交集
  • SINTERCARD numkeys key [key ...] [LIMIT limit]显示 numkeys 个集合取交集后的集合的元素数量

  

 

五、RedisZSet(Sorted set | ZSet)

有序集合,与Set一样也是String类型元素的集合,集合成员是唯一的,但是每个元素都会关联一个double类型的分数,通过分数来进行排序,分数可以重复。

ZSet是通过哈希表实现的,添加、删除、查找的复杂度是O(1),集合中最大的成员数为2^32 - 1

  • ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]向有序集合中加入一个元素和该元素的分数
  • ZRANGE key min max按照元素分数大小输出该集合的 member(升序输出),ZRANGE zset1 0 -1 WITHSCORES比前面多加了一个 score
  • ZREVRANGE key start stop [WITHSCORES]降序输出
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]输出分数在 [ min, max ] 之间的元素,LIMIT:输出 下标在 [offset, count] 之间元素
  • ZRANGEBYSCORE key (min max输出分数在 ( min, max ] 之间的元素
  • ZSCORE key member获取指定元素的分数
  • ZCARD key获取集合全部元素的个数
  • ZREM key member [member ...]删除集合里面的元素
  • ZINCRBY key increment member为 member 加上 increment
  • ZCOUNT key min max统计分数在 [ min, max ] 中元素的个数
  • ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]从 numkeys 个集合里面弹出 count 个最大或最小的元素
  • ZRANK key member获取集合中 member 元素的下标 
  • ZREVRANK key member逆序获取集合中 member 元素的下标 

六、Redis地理空间(GEO | Geospatial)

存储地理位置信息,可以添加地理位置的坐标、获取地理位置的坐标、计算两个地理位置之间的距离、根据用户给定的经纬度来获取指定范围内的地理位置集合

底层是 zset,输出中文乱码的解决方法:redis-cli -a 密码 --raw加上 --raw

  • GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]存储 member 的经度(longitude)和纬度(latitude)到 key 中
  • GEOPOS key member [member ...]返回 key 中指定成员的经纬度  天安门 故宫 八达岭长城
  • GEOHASH key member [member ...]将指定 member 的经纬度映射为一个值
  • GEODIST key member1 member2 [M|KM|FT|MI]计算 member1 和 member2 之间的距离(单位默认为米),单位有米、千米、英尺、英里 
  • GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]

  以给定的经纬度为中心,返回与中心距离不超过 radius 的所有位置(在 key 中进行比较)

  WITHCOORD返回位置的经纬度

  WITHDIST返回与中心之间的距离

  WITHHASH以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。(菜鸟教程

  COUNT显示返回元素的个数

  ASC返回位置按距离从近到远显示(升序)

  DESC返回位置按距离从远到近显示(降序)

  • GEORADIUSBYMEMBER key member radius以给定的 member 为中心,返回与中心距离不超过 radius 的所有位置(在 key 中进行比较)

七、Redis基数统计(HyperLogLog)

HyperLogLog是用来基数统计的算法,统计网站的 UV(Unique Visitor 独立访客:一般为客户端IP),统计搜索网站关键词的数量。用于统计一个集合中不重复的元素个数。误差率为 0.81%

  • PFADD key [element [element ...]]将元素添加到 HyperLogLog 中
  • PFCOUNT key [key ...]返回给定 HyperLogLog 的基数估计值
  • PFMERGE destkey sourcekey [sourcekey ...]将多个 HyperLogLog 合并为一个存到 destkey 中

八、Redis位图(Bitmap)

基于String数据类型,由0和1状态表现的二进制bit数组(bit arrays),用来判断 Y/N 状态

  • SETBIT key offset value设置位图的第 offset 位的值,offset 最大值为 2^32,512MB = 2^9 × 2 ^ 20 × 2^3 = 2^32
  • GETBIT key offset获取指定位的值
  • STRLEN key获取该位图占据的字节长度,每 8 位为一组
  • BITCOUNT key [start end [BYTE|BIT]]统计位图中 1 的个数
  • BITOP operation destkey key [key ...]对 key 进行 AND(与)、OR(或)、NOT(非)、XOR(异或)运算并将结果存到 destkey 中

九、Redis位域(Bitfield)

可以一次性操作多个比特位域(指连续的多个比特位),并返回一个响应数组,数组中的元素对应参数列表中的相应操作的执行结果

 

十、Redis流(Stream)

是Redis 5.0 版本新增的数据结构。Stream主要用于消息队列(MQ,Message Queue)。Redis版本的消息中间件。

  • XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|id field value [field value ...]添加消息到队列末尾消息ID要比上一个消息ID大;默认用 * 自动生成 ID

  

  会返回生成的消息ID,由毫秒时间戳和该毫秒内产生消息的个数组成

  • XRANGE key start end [COUNT count]用于获取消息队列,忽略删除的消息,- 代表最小值, + 代表最大值
  • XREVRANGE key end start [COUNT count]倒着获取消息队列
  • XDEL key id [id ...]删除指定消息
  • XLEN key获取消息队列中消息的个数
  • XTRIM key MAXLEN|MINID [=|~] threshold [LIMIT count]对消息队列进行截取,MAXLEN 限定消息队列的最大长度(删掉旧的),MINID 截取掉比指定时间戳小的消息

  

  

  • XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]用于获取消息(阻塞和非阻塞),只会返回大于指定ID的消息 

  COUNT最多读取多少条信息;BLOCK是否已阻塞的方式读取消息,默认不阻塞milliseconds如果设置为 0,表示永远阻塞

  XREAD count 2 streams mystream 000 | 0-0 | 00代表从最小的ID开始获取 Stream 中的消息,不指定 COUNT 时,返回所有消息

  XREAD count 1 block 0 streams mystream $以阻塞方式获取最新的消息,会等待着获取最新的消息

 

  • XGROUP CREATE key groupname id|$ [MKSTREAM] [ENTRIESREAD entries_read]创建消费者组,$ 表示从 Stream 尾部开始消费(只消费新的的消息),0 表示从 Stream 头部开始消费

   为 $ 表示只消费最新的的消息

   为 0-0 或者 0 表示从头开始消费(从旧的开始消费)

  • XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] id [id ...]    > 表示从第一条尚未被消费的消息开始读取 

    消费组 groupX 内的消费者 consumer1 从 mystream 中读取所有消息(默认读取全部消息)

  同一个消费组的消费者不能消费同一条消息,如果继续消费会显示 nil(读到空值),不同组的消费者可以消费同一条消息。

  创建消费组的目的:让组内的多个消费者共同分担读取消息的工作,从而实现消息读取负载的多个消费者间是均衡分布的

  • XPENDING key group [[IDLE min-idle-time] start end count [consumer]]查询每个消费组内所有消费者已读但未确认的消息

  

  • XACK key group id [id ...]确认该消费组读取了那些消息

     确认 groupA 中 1709454179705-0 已被读取

  • XINFO STREAM key [FULL [COUNT count]]显示指定 Stream 的详细信息

 

标签:count,...,数据类型,元素,Redis,value,member,key,常用命令
From: https://www.cnblogs.com/shiguangrusuo/p/18019331

相关文章

  • 分布式锁实现——Redis
    分布式锁分布式锁的视线方式Redis实现分布式锁Zookeeper实现分布式锁MySQL实现分布式锁Etcd实现分布式锁实现分布式锁注意的点互斥性可重入性锁超时,防死锁锁释放正确,防误删阻塞和非阻塞公平和非公平Redis实现分布式锁的特点Redis是高性能的内存数据库,满足高......
  • 数据类型大小
    byte(字节型)长度:1,范围:-128~127short(短整型)长度:2,范围:-32768~32767int(整型)长度:4,范围:-2147483648~2147483647long(长整型)长度:8,范围:-9223372036854775808~9223372036854775807float(浮点型)长度:4,范围:-3.4E38~3.4E38double(双精度型)长度:8,范围:-1.7E308~1......
  • day.03 数据类型
    publicclassDemo2{publicstaticvoidmain(String[]args){//整数拓展:进制二进制0b十进制八进制0十六进制0xinti=10;inti2=010;//八进制0inti3=0x10;//十六进制0xSystem.out.println(i);System.......
  • Redis持久化
    目录RDBAOFRDB和AOF的优缺点Redis持久化方式有两种,RDB和AOFRDBRDB全称RedisDatabaseBackupfile(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。Redis内部由触发RDB的机制,可......
  • 数据类型的遍历
    数据类型的遍历:for循环语句1.for循环用来遍历序列2.通过不使用下标的方式来实现对序列中每一个元素的访问3.遍历的对象:列表,元组,字符串,字典,集合遍历列表:#遍历列表a=[1,2,3,4,5]forelementina:print(element,end="")print()#遍历列表的元素数据,......
  • Redis 架构深入:主从复制、哨兵到集群
    大家好,我是小康,今天我们来聊下Redis的几种架构模式,包括主从复制、哨兵和集群模式。前言:设想一下,你的咖啡馆在城市中太受欢迎,导致每天都人满为患。为了缓解这种压力,你决定在其他地方开设分店,这样顾客就可以在附近的分店享受咖啡,而不必涌向一个地方,这就好比Redis的主从复制,让......
  • Redis 常见数据类型(对象类型)和应用案列
    前言:每次你在游戏中看到玩家排行榜,或者在音乐应用中浏览热门歌单,有没有想过这个排行榜是如何做到实时更新的?当然,依靠Redis即可做到。在技术领域,我们经常听到「键值存储」这个词。但在Redis的世界里,这只是冰山一角。Redis的对象,不仅仅是简单的数据,它们是为各种任务量身定......
  • 6大数据类型相互转换
    定义:Python中的不同数据类型是不能进行转换的,所以我们需要数据类型转换,一共分为两种类型转换自动类型转换强制类型转换在Python中:容器类型数据:字符串,列表,元组,字典,集合非容器类型数据:数字类型,布尔类型自动类型转换定义:当两个不同类型的数据进行转换时,结果会进行计算a......
  • 全面解析 Redis 持久化:RDB、AOF与混合持久化
    前言:每次你在游戏中看到玩家排行榜,或者在音乐应用中浏览热门歌单,有没有想过这个排行榜是如何做到实时更新的?当然,依靠Redis即可做到。在技术领域,我们经常听到「键值存储」这个词。但在Redis的世界里,这只是冰山一角。Redis的对象,不仅仅是简单的数据,它们是为各种任务量身定......
  • rpmdb 常用命令初始化与重建rpm数据库
    在Linux系统中,rpmdb命令用于初始化和重建rpm数据库。这里有一些常用的rpmdb方法:初始化RPM数据库:rpmdb--initdb这个命令会创建一个新的RPM数据库,如果数据库已经存在,它不会做任何事情。重建RPM数据库:rpmdb--rebuilddb如果RPM数据库损坏或者需要更新,这个命令会从已安......