redis | 四、redis之String

177 阅读5分钟

redis系列文章:
liudongdong.top/categories/…
本篇来源:
liudongdong.top/archives/re…

公众号:雨中散步撒哈拉
备注:欢迎关注公众号,一起学习,共同进步!

一、基本语法

Redis 字符串(String)
Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

语法

redis 127.0.0.1:6379> COMMAND KEY_NAME

实例

127.0.0.1:6379> set learn_redis liudd
OK
127.0.0.1:6379> get learn_redis
"liudd"
127.0.0.1:6379> 

适用场景:

  1. 计数器

  2. 统计多单位的数量

  3. 粉丝数

  4. 对象缓存存储

二、命令划分

个人觉得string类型,命令比较多些,便于个人理解和学习,进行了简单分类!
分为以下几类:

  1. 赋值命令

  2. 取值命令

  3. 特有命令

  4. 额外命令

  5. 对象格式操作

以上为个人理解,进行简单划分。具体对命令的理解,期待你的理解方法!

1. 赋值命令

  1. set:设置值

  2. setnx:如果值不存在则进行赋值

  3. mset:批量设值

  4. msetnx:批量设值,且key不存在

  5. getset:返回旧值,设值新值

2. 取值命令

  1. get:获取key的值

  2. mget:批量获取key的值

3. 特有命令

  1. exists:判断key是否存在

  2. append:根据key进行追加

  3. strlen:获取key的长度

  4. setrange:根据起终下标,进行设值(个人理解为字符串替换replace)

  5. getrange:根据起终下标,进行取值(个人理解为字符串截取substring)

4. 额外命令

  1. setex:设值key,并设置过期时间(单位:s/秒))

  2. psetex:设值key,并设置过期时间(单位:ms/毫秒))

  3. incr:int类型,进行key的自增(i++)

  4. decr:int类型,进行key的自减(i--)

  5. incrby:int类型,根据步长进行key的增加(i+n)

  6. decrby:int类型,根据步长进行key的增减(i-n)

  7. incrbyfloat:float类型,根据float值,进行增减(正负)

5. 对象格式操作

根据id和属性进行对象的存取值

三、分类命令实践

1. 赋值命令

# 查看当前库所有key
127.0.0.1:6379> keys *
(empty list or set)
# 设值k1
127.0.0.1:6379> set k1 v1
OK
# 测试setnx对k1,如果k1存在是否存储
127.0.0.1:6379> setnx k1 kk
(integer) 0
# 上步返回0,结果为存储失败,进行查看k1值
127.0.0.1:6379> get k1
"v1"
# k2不存在,进行存储
127.0.0.1:6379> setnx k2 v2
(integer) 1
# 上步返回1,存储成功,进行查看
127.0.0.1:6379> get k2
"v2"
# 批量设值
127.0.0.1:6379> mset k3 v3 k4 v4
OK
# 批量取值
127.0.0.1:6379> mget k3 k4
1) "v3"
2) "v4"
# 返回旧值,设值新值
127.0.0.1:6379> getset k4 v5
"v4"
# 查看结果
127.0.0.1:6379> get k4
"v5"
127.0.0.1:6379>

2. 取值命令

前一步,已经根据设值进行了设值和取值,本步单独进行取值

127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k2 k3 k4
1) "v2"
2) "v3"
3) "v5"
127.0.0.1:6379> 

3. 特有命令

# 查看当前库,
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "k4"
4) "k2"
# 判断是否存储k4
127.0.0.1:6379> exists k4
(integer) 1
# 判断是否存在k5
127.0.0.1:6379> exists k5
(integer) 0
# k4进行追加值
127.0.0.1:6379> append k4 aaa
(integer) 5
127.0.0.1:6379> get k4
"v5aaa"
# 获取k4值得长度
127.0.0.1:6379> strlen k4
(integer) 5
# 根据起始下标进行替换k4,起始下标为1
127.0.0.1:6379> setrange k4 1 kk
(integer) 5
127.0.0.1:6379> get k4
"vkkaa"
# 截取获取值,截取下标范围[2,4]
127.0.0.1:6379> getrange k4 2 4
"kaa"
# 如果出现负值,则下标为从右向左,开始为-1
127.0.0.1:6379> getrange k4 0 -1
"vkkaa"
127.0.0.1:6379>

题外话:
getrange取值下标规则

图片

image.png

4. 额外命令

# 设值过期时间为3秒
127.0.0.1:6379> setex k 3 kk
OK
127.0.0.1:6379> get k
"kk"
127.0.0.1:6379> get k
(nil)
# 设值过期时间为3000毫秒(3秒)
127.0.0.1:6379> psetex kk 3000 kk
OK
127.0.0.1:6379> get kk
"kk"
127.0.0.1:6379> get kk
(nil)
# 对i自增
127.0.0.1:6379> incr i
(integer) 1
127.0.0.1:6379> incr i
(integer) 2
127.0.0.1:6379> get i
"2"
# 对i自减
127.0.0.1:6379> decr i
(integer) 1
127.0.0.1:6379> decr i
(integer) 0
127.0.0.1:6379> get i
"0"
# 根据步长增加
127.0.0.1:6379> incrby i 3
(integer) 3
# 根据步长减少
127.0.0.1:6379> decrby i 4
(integer) -1
127.0.0.1:6379> get i
"-1"
# 对i进行float浮点数操作
127.0.0.1:6379> incrbyfloat i 2.1
"1.1"
127.0.0.1:6379> get i
"1.1"
127.0.0.1:6379> 

5. 对象格式操作

对象命令格式 mset key:{id}:{属性}

# id为1的user,进行设值
127.0.0.1:6379> mset user:1:name liudd user:1:age 2
OK
# 获取user,id为1的值
127.0.0.1:6379> mget user:1:name user:1:age
1"liudd"
2"2"
# 设值id为2的user对象
127.0.0.1:6379> mset user:2:name liudd2 user:2:age 3
OK
127.0.0.1:6379> mget user:2:name user:2:age
1"liudd2"
2"3"
127.0.0.1:6379> keys *
1"k1"
2"user:2:name"
3"k2"
4"user:1:age"
5"user:2:age"
6"k3"
7"user:1:name"
8"k4"
9"i"
127.0.0.1:6379>

附录:命令列表

下表列出了常用的 redis 字符串命令:

序号命令及描述
1SET key value 设置指定 key 的值
2GET key 获取指定 key 的值。
3GETRANGE key start end 返回 key 中字符串值的子字符
4GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
5GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
6[MGET key1 key2..] 获取所有(一个或多个)给定 key 的值。
7SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
8SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
9SETNX key value 只有在 key 不存在时设置 key 的值。
10SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
11STRLEN key 返回 key 所储存的字符串值的长度。
12[MSET key value key value …] 同时设置一个或多个 key-value 对。
13[MSETNX key value key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
14PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
15INCR key 将 key 中储存的数字值增一。
16INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
17INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
18DECR key 将 key 中储存的数字值减一。
19DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
20APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

更多命令请参考:redis.io/commands