Redis_常用数据类型及其命令

本文深入解析Redis中的五种主要数据结构:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(SortedSet)。详细介绍每种数据结构的特性、常用命令及应用场景,帮助读者掌握Redis数据存储和操作的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串String

string是Redis最基本的类型,一个key对应一个value。string 类型是二进制安全的,string可以包含任何数据。比如jpg图片或者序列化的对象。string类型的值最大能存储512MB

  • SET key value [EX seconds] [PX milliseconds] [NX|XX]
    将字符串值value关联到key,如果key已经被设置了其他值,set会把旧值覆盖,无视类型。当set对一个带有生存时间的键进行了设置之后,该键原有的TTL将被清除
    EX:设置过期时间秒
    PX:设置过期时间毫秒
    NX:只在该键不存在的时候才进行操作
    XX:只在该键已存在的时候才进行操作
  • GET key
    返回与键key相关联的字符串的值。如果键key不存在则返回特殊值nil,如果键key的值不是字符串类型就会返回一个错误
  • GETSET key value
    将键key的值设置为value,并返回被设置之前的旧值,如果键key没有旧值那么返回nil,但新值依然会被正常设置
  • STRLEN key
    返回键key存储的字符串值的长度,当键key不存在时,返回0
  • APPEND key value
    如果键key已经存在了并且它的值是一个字符串,那么这个命令会把value的值追加到key现有值的末尾,如果键key不存在,这个命令就是把键key的值设为value。无论key是否存在,命令的返回值都是键key的值的长度
  • SETRANGE key offset value
    从偏移量offset开始,用value覆盖键key原有的值,如果键key的原值比偏移量小,原值和偏移量之前的空白用\x00来填充,不存在的键key当做空白字符串处理。这个指令返回修改后的字符串的长度
127.0.0.1:6379> set k1 012345
OK
127.0.0.1:6379> SETRANGE k1 1 aa
(integer) 6
127.0.0.1:6379> get k1
"0aa345"

127.0.0.1:6379> SETRANGE k3 10 12345
(integer) 15
127.0.0.1:6379> get k3
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0012345"
127.0.0.1:6379> 

  • GETRANGE key start end
    返回键key对应的value的指定部分,由start和end两个变量指定(包含start和end),负数表示从末尾开始计数,-1表示最后一个字符。范围不会超过字符串本身长度,超过会被忽略
  • INCR key
    为键key存储的数字+1,如果键key不存在,那么它的值会被初始化为0,然后再执行INCR命令,也就是说对一个不存在的key执行INCR后再GET得到的是1。如果键key存储的值不能解释为数字,那么这个命令会报错
  • INCRBY key increment
    为键key存储的数字加上increment,如果键key不存在,那么它的值会被初始化为0,然后再执行INCRBY命令。如果键key存储的值不能解释为数字,那么这个命令会报错
  • INCRBYFLOAT key increment
    INCRBY的浮点数增量版本
  • DECR key
    为键key存储的数字值-1,其他说明和INCR一致
  • DECRBY key decrement
    为键key存储的数字减去decrement,其他说明和INCRBY一致
  • MSET key value [key value …]
    同时为多个键设置值。如果某个给定的键已经存在了,那么MSET会用新值去覆盖旧值。这是一个原子性的操作,所有的键会在同一时间内被赋值
  • MSETNX key value [key value …]
    当且仅当所有的键都不存在的时候,给所有的键赋值。赋值列表中存在一个已经有值了的key会操作失败
  • MGET key [key …]
    返回给定的一个或多个字符串键的值。命令会返回一个列表,如果某个键不存在,这个键的值用nil表示
哈希Hash

Hash是一个键值对集合。有三个元素组成:hash、field、value。其中hash是key有点像Map<String,Object>中的String,而field(域)则相当于Object对象里面的一个属性,value是属性对应的值。

  • HSET hash field value
    将哈希表hash中的field的值设置为value,如果给定的哈希表(hash)不存在,将创建一个并执行HSET操作,如果field已经存在于哈希表中,那么它的旧值将被新值value覆盖
  • HSETNX hash field value
    当field的值不存在的时候才赋值,如果以及存在了则放弃操作
  • HGET hash field
    返回hash表中给定field的值,如果hash或fiel不存在则返回nil
  • HEXISTS hash field
    检查hash中的field是否存在,存在返回1,不存在返回0
  • HDEL hash field [field …]
    删除哈希表中的一个或多个field,不存在的field将被忽略
  • HLEN hash
    返回hash中field的数量,当hash不存在的时候返回0
  • HSTRLEN hash field
    返回hash中指定field对应的值的字符串长度
  • HINCRBY hash field increment
    为hash中的field对应的值加上增量increment,当然这个值可以是负数,如果hash不存在则创建一个新的hash并执行HINCRBY命令,如果field不存在,在执行命令之前,field的值初始化为0,对一个存储字符串值的field执行这个命令会报错
  • HINCRBYFLOAT hash field increment
    HINCRBY命令的浮点数版本
  • HMSET hash field value [field value …]
    同时将多个field-value的值设置进hash中,如果hash不存在,则先创建一个空的hash然后执行HMSET操作
  • HMGET hash field [field …]
    返回hash中一个或多个field的值,不存在的hash当做空哈希表来处理
  • HKEYS hash
    返回hash中所有的field(object中的属性)
  • HVALS hash
    返回hash中所有field对应的值(object中属性的值)
  • HGETALL hash
    返回hash中所有的field和对应的值,每个field后面紧跟着它的值
127.0.0.1:6379> HGETALL user
1) "username"
2) "zhj"
3) "usersex"
4) "man"
5) "userage"
6) "24"
7) "useraddress"
8) "dalian"
127.0.0.1:6379> 
列表List

Redis的列表就是一个键key对应了一组value,Redis的列表底层是一个双向链表,所以可以从两头插入

  • LPUSH key value [value …]
    将一个或多个value插入到key所对应的列表的表头,如果key不存在,会创建一个空的列表再进行LPUSH操作。插入多个数据时候,因为每次都是向头部插入,所以LPUSH nums 1 2 3 4在列表中对应的是4321
  • LPUSHX key value [value …]
    将一个或多个value值插入到key所对应的列表的表头,如果key不存在则什么也不做
  • RPUSH key value [value …]
    把value插入到列表的尾部,其他参考LPUSH
  • RPUSHX key value
    把value插入到列表的尾部,其他参考LPUSHX
  • LPOP key
    移除并返回key对应列表的头部元素,当key不存在的时候返回nil
  • RPOP key
    移除并返回key对应列表的尾部元素,当key不存在的时候返回nil
  • RPOPLPUSH source destination
    先将列表source的尾部元素弹出返回客户端,然后把这个元素插入到destination列表的头部。这是一个原子操作,但如果source不存在则返回客户端一个nil,并且不执行后面的操作。如果destination不存在,则会先创建一个空列表然后执行LPUSH。如果sourcedestination相同则是返回尾部元素,并把尾部元素移到头部
  • LREM key count value
    根据count的值,移除列表中与参数value相等的元素
    count>0:从表头开始向表尾搜索,移除与value相等的元素,数量为count
    count<0:从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值
    count=0:移除表中所有与value相等的值
  • LLEN key
    返回列表key的长度,如果列表不存在则返回0
  • LINDEX key index
    返回列表key中,下标为index的元素,第一个元素下标是0,-1表示最后一个元素。如果下标超过列表区间范围返回nil
  • LINSERT key BEFORE|AFTER pivot value
    将值value插入列表key中,位于值pivot的之前或之后,当key或pivot不存在的时候,不进行任何操作
  • LSET key index value
    把列表key中下标为index的元素的值设置为value,当key列表不存在或index超出范围时报错
  • LRANGE key start stop
    返回列表key中指定区间的元素,包含startstop,下标0代表第一个元素,-1代表最后一个元素。如果start的下标比列表最大下标都大则返回空列表。如果stop下标比end大,Redis会将stop的值设置为end
  • LTRIM key start stop
    使列表key清除其他元素,只保留指定区间的元素,包含指定区间
  • BLPOP key [key …] timeout
    LPOP命令的阻塞版本,当给定列表内没有任何元素可供弹出时,连接会被BLPOP命令阻塞,知道等待超时或发现可弹出元素为止,当给定多个key列表时候,按照参数key的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。timeout的单位是秒,当timeout的值为0时,代表可以无限期阻塞,直到可以弹出一个元素为止
  • BRPOP key [key …] timeout
    弹出尾部元素,其他行为和BLPOP一致
  • BRPOPLPUSH source destination timeout
    当source不为空的时候,行为和RPOPLPUSH一致
集合Set

Set是String类型的集合,是无序且每个元素唯一

  • SADD key member [member …]
    向集合key中添加一个或多个member,集合中已经存在的member会被忽略。如果key不存在,则会先创建一个集合再添加member
  • SISMEMBER key member
    判断集合key中是否包含member,包含返回1,不包含或key不存在返回0
  • SPOP key
    随机移除并返回给客户端一个元素,key不存在或集合为空时返回nil
  • SRANDMEMBER key [count]
    • 没有count参数:返回集合中的一个随机元素
    • count为正数:小于集合总数,返回一个包含count个元素的数组,数组元素各不相同。大于或等于集合总数则返回整个集合
    • count为负数:返回一个数组,数组中的元素可能会反复出现多次,数组的长度为count的绝对值

上述都操作不会改变集合中的元素。

  • SREM key member [member …]
    移除集合key中的一个或多个member,集合中不存在的member会被忽略
  • SMOVE source destination member
    将member从集合source移动到destination,如果source不存在或不包含指定的member元素,SMOVE不执行任何操作,否则将元素member从source中移除并添加到destination中,操作成功返回1,否则返回0
  • SCARD key
    返回集合key中成员的数量,当key不存在的时候返回0
  • SMEMBERS key
    返回集合key中的所有成员,不存在的key视为空集合
  • SINTER key [key …]
    返回一个集合的全部成员,这个集合是所有给定集合的交集。不存在的key被视为空集。当给定集合中有一个空集的时候那么返回值也是空集
  • SINTERSTORE destination key [key …]
    类似于SINTER,但是这个命令将结果保存到destination中,而不是仅仅返回结果集,如果destination以及存在了那么将其覆盖,也就是说destination可以是给定集合中的一个
  • SUNION key [key …]
    返回一个集合的全部成员,这个集合是所有给定集合的合集。不存在的key被视为空集
  • SUNIONSTORE destination key [key …]
    类似于SUNION,但是将结果保存在destination
  • SDIFF key [key …]
    返回一个集合的全部成员,这个集合是所有给定集合的差集。不存在的key被视为空集
  • SDIFFSTORE destination key [key …]
    类似于SDIFF,但是将结果保存在destination
有序集合SortedSet

Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。但每个元素都会关联一个double类型的分数。Redis通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复

  • ZADD key [NX|XX] [CH] [INCR] score member [score member …]
    将一个或多个member及其score值添加到有序集key中,如果member已经在score中存在了,那么会更新这个member的值,并通过重新插入这个member元素来保证它在正确的位置上。score可以使整数或双精度浮点数。如果key不存在则先创建一个空的有序集并执行ZADD操作,返回值是被成功添加的新成员的数量,不包括被修改的成员。
    NX:不更新存在的成员,只添加成员
    XX:仅仅更新存在的成员,不添加新成员
    CH:changed,修改返回值为发生变化的成员总数(新添加的和被更新分数的)
    INCR:当指定这个选项时候,成员操作就等同于ZINCRBY命令,此时score相当于increment
  • ZSCORE key member
    返回有序集key中成员member对应的score值,如果member不是key的成员或key不存在,返回nil
  • ZINCRBY key increment member
    为有序集key的成员member的score加上增量increment,这个值可以是负数,当key不存在,或member不是key的成员时,ZINCRBY key increment member等同于ZADD key increment member
  • ZCARD key
    返回有序集key中成员的个数,当key不存在的时候返回0
  • ZCOUNT key min max
    返回有序集key中,score值在min和max(包含)之间的成员的数量。Redis区间默认都是闭区间,我们想使用开区间的时候可以在参数前加一个(来标识这个参数是一个开区间
  • ZRANGE key start stop [WITHSCORES]
    返回有序集key中指定区间内的成员,成员位置按scor的值递增排列。0表示第一个成员,-1表示最后一个成员。可以使用WITHSCORES选项来让member和score一并返回
127.0.0.1:6379> ZADD leave 1 a 2 b 3 c 
(integer) 3
127.0.0.1:6379> ZRANGE leave 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> ZRANGE leave 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
127.0.0.1:6379> 
  • ZREVRANGE key start stop [WITHSCORES]
    ZRANGE基本一样,但是它返回的值是score从大到小排列(降序)
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    返回有序集key中,所有score在min和max之间的(包含)的成员,返回值按照score的值递增排列。LIMIT就像SQL中的分页一样。WITHSCORES可以把member和score一同返回
  • ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
    ZRANGEBYSCORE基本一样,但是它返回的值是score从大到小排列(降序)
  • ZRANK key member
    返回有序集key中,member成员的排名。其中有序集成员按score值递增(从小到大)顺序排列。最小成员排名是0
  • ZREVRANK key member
    返回有序集key中,member成员的排名。其中有序集成员按score值递减(从大到小)顺序排列。最大成员排名是0
  • ZREM key member [member …]
    移除有序集key中的member,不存在的成员将被忽略
  • ZREMRANGEBYRANK key start stop
    移除有序集key中指定区间内的所有成员,下标0代表第一个成员,-1代表最后一个成员
  • ZREMRANGEBYSCORE key min max
    移除有序集key中score在min和max之间的所有成员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值