找回密码
 立即注册
首页 业界区 安全 Redis的基本命令

Redis的基本命令

苗嘉惠 7 天前
Redis是key-value数据库,key一般是字符串型,value可以是其他的
String、Hash、List、、Set、SortedSet(五个基本类型)GEO、BitMap、HyperLog
官方文档Commands | Docs
层级格式

结构

key允许有多个单词形成层级结构,多个单词之间用:隔开,格式如下:
  1. 项目名:业务名:类型:id
复制代码
可以将对象序列化为JSON字符串后存储
避免id冲突
通用命令

MSET

可以一次设置多个键值对的命令,属于原子性操作,要么成功,要么失败
KEYS

查看符合末班的所有key(不建议生产环境)
DEL

有中括号,可以删除多个
EXISTS

也可以一对多
判断是否存在
EXPIRE

给key设置有效期,有效期到期时key会被删除
TTL

查看剩余有效期
-2相当于已经删除了
-1相当于永久有效
String类型

意味着它的value是字符串,不过根据字符串的格式不同,又可以分为stringintfloat。无论哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型空间不超过512m
基础命令

SET

设置一个值(覆盖已有值)
  1. SET name "Qfish"
复制代码
GET

取值
  1. GET name
复制代码
批量操作

MSET

一次设置多个值
  1. MSET a 1 b 2 c 3
复制代码
MGET

  1. MGET a b c
复制代码
设置时间

SETEX

设置值 + 过期时间
秒级过期
  1. SETEX code 60 "123456"
复制代码
PSETEX

毫秒级过期
  1. PSETEX temp 500 "hi"
复制代码
SETNX key value

仅当 key 不存在时才设置(常用于分布式锁)
  1. SETNX lock 1
复制代码
数字操作

INCR

自增加1
  1. INCR count
复制代码
DECR

自减1
  1. DECR count
复制代码
INCRBY

自增n
  1. INCRBY count 10
复制代码
DECRBY

自减n
  1. DECRBY count 10
复制代码
INCRBYFLOAT

自增浮点数
  1. INCRBYFLOAT price 0.8
复制代码
字符串追加与长度

APPEND

往原值后追加内容
  1. APPEND msg " world"
复制代码
STRLEN

获取字符串长度
  1. STRLEN name
复制代码
子串操作

GETRANGE key start end
按范围取子串
  1. GETRANGE title 0 4
复制代码
SETRANGE key offset value
从偏移位置开始覆盖写入(不会删除之后的内容)
  1. SETRANGE name 2 "fish"
复制代码
GETSET

GETSET key newValue
返回旧值,同时设置新值
  1. GETSET token "new_token"
复制代码
set key value nx==setnx

setex同理
List类型

可以看做一个双向链表结构,或者也可以说很像双端队列,既可以支持正向检索,也可以支持反向检索。所以它是有序可重复插入和删除快查询速度一般
添加元素

LPUSH key value [value ...]和RPUSH key value [value ...]

分别是向列表左边和右边添加数据,同时返回最后一个值
  1. LPUSH mylist a b c → 列表变 [c,b,a] 返回c
  2. RPUSH mylist a b c → [a,b,c] 返回c
复制代码
删除元素

LPOP key和RPOP key

顾名思义就是对于列表分别从左和从右删除元素,并且返回元素
列表是[a,b,c]
  1. LPOP mylist  → 列表变 [b,c]返回a
  2. RPOP mylist  → 列表变[a,b]返回c
复制代码
LREM key count value

移除列表中与 value 匹配的元素,这里的count意思是从头开始三处几个value
  1. LREM mylist 2 a → 从头开始删除 2 个 a
复制代码
获取元素

LINDEX key index

获取指定索引的元素(0为头,-1为尾)
  1. LINDEX mylist 0 → 获取头元素
复制代码
LRANGE key start stop

获取指定区间的元素(包含 start 和 stop)
  1. LRANGE mylist 0 -1 → 获取所有
复制代码
修改插入元素

LSET key index value

设置指定索引的值
  1. LSET mylist 0 x
复制代码
LINSERT key BEFORE|AFTER pivot value

在 list 中找到 pivot(基准值),然后把新元素插入到它 前面(BEFORE)后面(AFTER)
  1. LINSERT mylist BEFORE "b" "x"
复制代码
那么这时候可能会有人要问,如果有多个怎么办,不用担心,它只会匹配第一个出现的。所以引出一个思考:应该怎么解决想要特定的值呢?个人建议可以加一个唯一标识,比如id这种
弹出元素

BLPOP key [key ...] timeout和BRPOP key [key ...] timeout

分别是阻塞弹出左边和右边元素,timeout 秒。timeout是等待,因为不可能一直等下去,如果没有元素就会等待timeout
  1. BLPOP mylist 5
  2. BRPOP mylist 5
复制代码
长度

LLEN key

获取列表长度
  1. LLEN mylist
复制代码
LTRIM key start stop

裁剪列表,只保留指定区间
  1. LTRIM mylist 0 9 → 只保留前 0-9的元素,包括start和stop
复制代码
Hash类型

也叫散列,其value是一个无序字典,类似于Java中的HashMap结构
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
基础操作

HSET key field value

设置一个字段的值,
  1. HSET user:1 name "tom"
复制代码
HGET key field

获取一个字段值
  1. HGET user:1 name
复制代码
HDEL key field [field ...]

删除一个或多个字段
  1. HDEL user:1 name age
复制代码
HEXISTS key field

字段是否存在
  1. HEXISTS user:1 age
复制代码
然后就会发现,hash相比于string前面只是多了一个h,这还是很好记的,然后多了一个field,其实可以直接当做map一样理解就可以了
批量操作

HMSET key field value [field value ...](8.0 之后推荐 HSET 多字段)

  1. HMSET user:1 name "tom" age 18
复制代码
HMGET key field [field ...]

  1. HMGET user:1 name age
复制代码
HGETALL key

返回所有字段和值
  1. HGETALL user:1
复制代码
遍历操作

HKEYS key

返回所有字段名
  1. HKEYS user:1
复制代码
HVALS key

返回所有字段值
  1. HVALS user:1
复制代码
HLEN key

返回字段数量
  1. HLEN user:1
复制代码
数字操作(字段里的数字也能自增)

HINCRBY key field increment

  1. HINCRBY user:1 age 1
复制代码
HINCRBYFLOAT key field increment

  1. HINCRBYFLOAT wallet balance 8.5
复制代码
HSETNX key field value

作用参考string版,当然过期的话只能用EXPIRE,不存在HSETEX这
Set类型

可以看成value为null的HashMap,也是一个Hash表。所以它是无序元素不可重复查找快支持交集、并集、差集等功能。如果是学过C++的小伙伴,千万不要和STL里面的Set搞混了。
添加元素

SADD key member [member ...]

  1. SADD myset a b c
复制代码
删除元素

SREM key member [member ...]

  1. SREM myset a
复制代码
判断是否存在

SISMEMBER key member

  1. SISMEMBER myset a   # 1 或 0
复制代码
获取所有元素

SMEMBERS key

  1. SMEMBERS myset
复制代码
获取元素数量

SCARD key

  1. SCARD myset
复制代码
返回随机元素(不删除)

SRANDMEMBER key [count]

count是返回的个数
  1. SRANDMEMBER myset     # 返回一个
  2. SRANDMEMBER myset 3   # 返回三个(可重复)
复制代码
随机弹出(返回并删除)

SPOP key [count]

  1. SPOP myset        # 随机删除并返回
  2. SPOP myset 2
复制代码
交集

SINTER key [key ...]

  1. SINTER set1 set2
复制代码
保存交集

SINTERSTORE key destkey

  1. SINTERSTORE result set1 set2
复制代码
并集

SUNION key [key ...]

  1. SUNION set1 set2
复制代码
保存并集

SUNIONSTORE result set1 set2

差集(属于 A 不属于 B)

SDIFF key [key ...]

  1. SDIFF set1 set2
复制代码
差集合并

  1. SDIFFSTORE result set1 set2
复制代码
扫描

SSCAN key cursor [MATCH pattern] [COUNT count]

SortedSet类型

可排序查询速度快元素不重复
添加 / 更新元素

ZADD key score member [score member ...]

添加或者更新成员的 score。
  1. ZADD rank 100 user1
  2. ZADD rank 200 user2 150 user3
复制代码
获取元素(按排名或分数)

ZRANGE key start stop [WITHSCORES]

按 score 从小到大 + 按 rank 获取元素。
  1. ZRANGE rank 0 -1 WITHSCORES
复制代码
ZREVRANGE key start stop [WITHSCORES]

按 score 从大到小。
  按 score 区间查询

ZRANGEBYSCORE key min max [WITHSCORES]

按 score 范围查成员。
  1. ZRANGEBYSCORE rank 100 200
复制代码
ZREVRANGEBYSCORE key max min

倒序版。
  获取排名 / 分数

ZSCORE key member

查看某成员分数。
  1. ZSCORE rank user1
复制代码
ZRANK key member

成员在 升序 排名中的位置(0-based)。
  1. ZRANK rank user1
复制代码
ZREVRANK key member

下降序排名。
  删除相关

ZREM key member [member ...]

删除成员。
  1. ZREM rank user1 user2
复制代码
ZREMRANGEBYSCORE key min max

按 score 删除。
ZREMRANGEBYRANK key start stop

按排名删除。
  计数相关

ZCARD key

获取成员数量。
ZCOUNT key min max

统计 score 在范围内的数量。
  修改 score

ZINCRBY key increment member

让成员 score 增加/减少。
  1. ZINCRBY rank 10 user1
复制代码
集群/集合操作

ZINTERSTORE destination numkeys key [key ...]

多个 ZSet 求交集并存储。
ZUNIONSTORE destination numkeys key [key ...]

多个 ZSet 求并集并存储。
可以搭配 WEIGHTS、AGGREGATE 做更复杂权重计算。
  其它常用

ZPOPMax / ZPOPMin

弹出 score 最大/最小的成员。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

7 天前

举报

您需要登录后才可以回帖 登录 | 立即注册