Redis 命令

简言

Redis是基于C语言开发的一个开源的高性能键值对(key-value)数据库。


Keys 命令


  • 设置 key 的生存时间 > expire key seconds
  • 查看 key 的剩余存活时间 > ttl key
// 设置 k1 的值
127.0.0.1:6379> set k1 haha
OK
// 获取 k1 的值
127.0.0.1:6379> get k1
"haha"
// expire 设置 k1 存活 10 秒
127.0.0.1:6379> expire k1 10
(integer) 1
// ttl 获取剩余存活时间
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> ttl k1
(integer) 4
// k1 已过期
127.0.0.1:6379> ttl k1
(integer) -2
127.0.0.1:6379> get k1
(nil)
  • 指定匹配模式 > keys key*
127.0.0.1:6379> **keys** set*
1) "setA"
2) "set-key"
3) "setB"
4) "set:1"
// 不建议使用
127.0.0.1:6379> keys *
1) "zset-key"
2) "list:2"
3) "list:1"
4) "set-key"
5) "set:1"
6) "zset1"
  • 判断key是否存在 > exists key
// 存在返回 1,不存在返回 0
127.0.0.1:6379> exists setA
(integer) 1
127.0.0.1:6379> exists setAA
(integer) 0
  • 删除(可以删除多个)> del key [key …]
127.0.0.1:6379> del setA setB
(integer) 2
  • 重命名键 > rename key new_key
127.0.0.1:6379> set aaa 10
OK
127.0.0.1:6379> get aaa
"10"
// 重命名
127.0.0.1:6379> rename aaa bbb
OK
127.0.0.1:6379> get bbb
"10"
  • 返回值的类型 > type key
127.0.0.1:6379> type bbb
string
127.0.0.1:6379> type list:1
list
127.0.0.1:6379> type set:1
set

String (字符串)类型


  • 添加键值 > set key value
127.0.0.1:6379> set k1 val1
OK
  • 取值 > get key
127.0.0.1:6379> get k1
"val1"
  • 一次性设置多个键值 > mset key value [key value …]
127.0.0.1:6379> mset k2 v2 k3 v3
OK
  • 一次性获取多个值 > mget key [key …]
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"
  • 取值并赋值 > getset key value
// 获取当前key 的值并重新更新为value, 如果不存在当前key, 则添加新的 key-value对
127.0.0.1:6379> getset k1 666
"11"
  • 删除一个或多个 key-value 对 > del key [key …]
// 删除一个
127.0.0.1:6379> del k1
(integer) 1
// 删除多个
127.0.0.1:6379> del k2 k3
(integer) 2
  • 数值自增 > incr key
// 每次自增 1,如果还没有该 key-value,则增加该key-value,并从 0 开始自增 1
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
  • 指定自增的值 > incrby key increment
// 获取 num 当前的值
127.0.0.1:6379> get num
"5"
// num 值自增加 3,即 5 + 3 = 8
127.0.0.1:6379> incrby num 3
(integer) 8
// 再次自增 3,即 8 + 3 = 11
127.0.0.1:6379> incrby num 3
(integer) 11
  • 数值自减 > decr key
// 每次自减 1,如果还没有该 key-value,则增加该key-value,并从 0 开始自减 1
127.0.0.1:6379> get num
"11"
127.0.0.1:6379> decr num
(integer) 10
127.0.0.1:6379> decr num
(integer) 9
  • 指定自减的值 > decrby key decrement
// 获取 num 当前的值
127.0.0.1:6379> get num
"9"
// num 值自减 3,即 9 - 3 = 6
127.0.0.1:6379> decrby num 3
(integer) 6
127.0.0.1:6379> decrby num 3
(integer) 3
  • 在尾部追加值 > append key value
// 设置一个字符串 str
127.0.0.1:6379> set str hello
OK
// 获取 str 的值
127.0.0.1:6379> get str
"hello"
// 在其尾部追加 redis
127.0.0.1:6379> append str " redis "
(integer) 12
// 最后得到的结果
127.0.0.1:6379> get str
"hello redis "
  • 获取字符串的长度 > strlen key
// 设置字符串 str 的值
127.0.0.1:6379> set str "Hello world!"
OK
// 获取 str 的值
127.0.0.1:6379> get str
"Hello world!"
// 获取字符串 str 的长度,
127.0.0.1:6379> strlen str
(integer) 12

Hash (散列、哈希)类型


可以理解为一个对象,一个对象又有多个字段,hash则是存储一个对象

  • 一次设置一个字段值 > hset key field value
// 增加成功返回一个 1
127.0.0.1:6379> hset user username lishi
(integer) 1
127.0.0.1:6379> hset user age 18
(integer) 1

借助 RedisDesktopManager 工具来查看
在这里插入图片描述

  • 一次设置多个字段值 > hmset key field value [field value …]
127.0.0.1:6379> hmset user2 username zhangsan age 20
OK

在这里插入图片描述

  • 一次取一个字段的值 > hget key field
// 获取user 中的 username 字段的值
127.0.0.1:6379> hget user username
"lishi"
// 当字段不存在时,返回一个 nil
127.0.0.1:6379> hget user addr
(nil)
  • 一次获取多个字段值 > hmget key field [field …]
127.0.0.1:6379> hmget user username age
1) "lishi"
2) "18"
  • 获取所有字段和值 > hgetall key
127.0.0.1:6379> hgetall user
1) "username"
2) "lishi"
3) "age"
4) "18"
  • 删除一个或多个字段 > hdel key field [field …]
// 删除user中的age字段, 删除成功返回 1, 失败返回 0
127.0.0.1:6379> hdel user age
(integer) 1
// 删除user中的username和age字段
127.0.0.1:6379> hdel user username age
(integer) 1
// 删除失败
127.0.0.1:6379> hdel user age
(integer) 0
  • 对字段的数值进行增加 > hincrby key field increment
// 对 user 增加 username 和 age 字段
127.0.0.1:6379> hmset user username lishi age 18
OK
// 获取 age 字段中的值
127.0.0.1:6379> hget user age
"18"
// 对 age 字段的值增加 2,增加成功后,返回增加后的值
127.0.0.1:6379> hincrby user age 2
(integer) 20
// 再次获取 age 字段的值
127.0.0.1:6379> hget user age
"20"
  • 判断字段是否存在 > hexists key field
// 存在返回 1, 不存在返回 0
127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379> hexists user addr
(integer) 0
  • 只获取字段名 > hkeys key
127.0.0.1:6379> hkeys user
1) "username"
2) "age"
  • 只获取字段值 > hvals key
127.0.0.1:6379> hvals user
1) "lishi"
2) "20"
  • 获取字段的数量 > hlen key
// 返回字段的个数
127.0.0.1:6379> hlen user
(integer) 2
  • 应用
// 增加两个用户
127.0.0.1:6379> hmset user:1001 username zhangsan age 18
OK
127.0.0.1:6379> hmset user:1002 username lishi age 20 addr beijing
OK
// 获取 1002 用户的地址
127.0.0.1:6379> hget user:1002 addr
"beijing"

在这里插入图片描述


List (列表)类型


基于链表实现

  • 向列表的的左边增加元素 > lpush key value [value …]
// 向 1 号列表的左端增加值
127.0.0.1:6379> lpush list:1 0 1 2 3
(integer) 4

在这里插入图片描述

  • 向列表的右边增加元素 > rpush key value [value …]
127.0.0.1:6379> rpush list:1 4 5 6
(integer) 7

在这里插入图片描述

  • 查看列表中指定索引范围的值 > lrange key start stop
    • 索引从0开始, stop为 -1 表示最后一个索引, 索引可以为负数,-1表示最后一个元素
127.0.0.1:6379> lrange list:1 1 5
1) "2"
2) "1"
3) "0"
4) "4"
5) "5"
127.0.0.1:6379> lrange list:1 -5 5
1) "1"
2) "0"
3) "4"
4) "5"
  • 从列表两端弹出元素 > lpop key / rpop key
// 从左边弹出一个元素,并返回该值
127.0.0.1:6379> lpop list:1
"3"
// 从右边弹出一个元素,并返回该值
127.0.0.1:6379> rpop list:1
"6"

在这里插入图片描述

  • 删除列表中指定的值 > lrem key count value
    • 删除列表中前 count 个值为value的元素,返回实际删除的元素个数,count值不同,操作有所区别
    • 当count > 0时, lrem会从列表左边开始删除
    • 当count < 0时, lrem会从列表后边开始删除
    • 当count = 0时, lrem删除所有值为value的元素
// 向列表左边添加值 
127.0.0.1:6379> rpush list:1  1 1 2 2 3 3 3
(integer) 12
// 从列表(list:1)左边删除 2 个值为 1 的元素
127.0.0.1:6379> lrem list:1 2 1
(integer) 2
// 删除列表(list:1)中所有值为 2 的元素
127.0.0.1:6379> lrem list:1 0 2
(integer) 3
// 从列表(list:1)后边删除 2 个值为 3 的元素
127.0.0.1:6379> lrem list:1 -2 3
(integer) 2
  • 获取指定索引处的值 > lindex key index (索引从0开始)
127.0.0.1:6379> lindex list:1 1
"4"
  • 设置指定索引处的值 > lset key index value
// 修改索引为1处的值
127.0.0.1:6379> lset list:1 1 5
OK
// 获取列表中所有的元素
127.0.0.1:6379> lrange list:1 0 -1
1) "0"
2) "5"
3) "5"
4) "1"
5) "3"
// 设置列表的len处的值,可以
127.0.0.1:6379> lset list:1 4 9
OK
// 在超过 len 处设置值,报错
127.0.0.1:6379> lset list:1 8 9
(error) ERR index out of range
  • 只保留指定部分的值 > ltrim key start stop
// 查询列表中的所有值
127.0.0.1:6379> lrange list:1 0 -1
1) "0"
2) "5"
3) "5"
4) "1"
5) "9"
// 只保留索引为 0 - 2 之间的值
127.0.0.1:6379> ltrim list:1 0 2
OK
// 再次查询所有值
127.0.0.1:6379> lrange list:1 0 -1
1) "0"
2) "5"
3) "5"
  • 插入值 > linsert key before|after pivot value
    • 列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面
127.0.0.1:6379> lrange list:1 0 -1
1) "0"
2) "5"
3) "5"
// 在 5 的后面插入一个 3
127.0.0.1:6379> linsert list:1 after 5 3
(integer) 4
127.0.0.1:6379> lrange list:1 0 -1
1) "0"
2) "5"
3) "3"
4) "5"
  • 将列表中最后的一个元素移到另一个列表左边 > rpoplpush source destination
127.0.0.1:6379> lrange list:1 0 -1
1) "0"
2) "5"
3) "3"
4) "5"
// 将list:1 列表中最后一个元素移到list:2列表中
127.0.0.1:6379> rpoplpush list:1 list:2
"5"
127.0.0.1:6379> lrange list:2 0 -1
1) "5"

Set (集合)类型


无序且不重复

  • 添加元素(可添加多个) > sadd key member [member …]
// 添加值,有两个 c,只添加一个,不能重复添加
127.0.0.1:6379> sadd set:1 a b c c
(integer) 3
// 获取集合中所有元素
127.0.0.1:6379> smembers set:1
1) "a"
2) "b"
3) "c"
  • 删除元素(可删除多个) > srem key member [member …]
// 删除两个元素
127.0.0.1:6379> srem set:1 c b
(integer) 2
// 获取集合中所有元素
127.0.0.1:6379> smembers set:1
1) "a"
  • 获取集合中所有元素 > smembers key
// 获取 set:1 集合的返回元素
127.0.0.1:6379> smembers set:1
1) "a"
2) "b"
3) "c"
  • 判断元素是否存在于集合 > sismember key member
// 存在返回 1
127.0.0.1:6379> sismember set:1 a
(integer) 1
// 不存在返回 0
127.0.0.1:6379> sismember set:1 g
(integer) 0
  • 差集运算 A-B,属于A并且不属于B的元素构成的集合 > sdiff key [key …]
127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4 5
(integer) 4
127.0.0.1:6379> sdiff setA setB
1) "1"
  • 交集运算 A ∩ B > sinter key [key …]
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers setB
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
  • 并集运算 A ∪ B > sunion setA setB
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> smembers setB
1) "2"
2) "3"
3) "4"
4) "5"
127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
  • 获取元素的个数 > card key
// 获取集合中的所有元素
127.0.0.1:6379> smembers setA
1) "1"
2) "2"
3) "3"
// 获取集合中元素的个数
127.0.0.1:6379> scard setA
(integer) 3
  • 随机弹出一个元素 > spop key
127.0.0.1:6379> spop setA
"3"

Zset (有序集合)类型


  • 添加 > zadd key score member [score member …]
127.0.0.1:6379> zadd zset1 90 m1 56 m2 88 m3
(integer) 3

在这里插入图片描述

  • 获取元素的分数 > zscore key member
127.0.0.1:6379> zscore zset1 m1
"90"
  • 删除(可删除多个) > zrem key member [member …]
127.0.0.1:6379> zrem zset1 m1
(integer) 1
  • 获得排名在某个范围的元素列表 > zrange key start stop [WITHSCORES]
    • 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
127.0.0.1:6379> zrange zset1 0 1
1) "m2"
2) "m3"
  • 按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)> zrevrange key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange zset1 0 1
1) "m3"
2) "m2"
  • 如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
127.0.0.1:6379> zrange zset1 0 1 WITHSCORES
1) "m2"
2) "56"
3) "m3"
4) "88"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值