Redis重制(四)String类型

10 阅读4分钟

这里我们来学习redis的第一个数据类型,也是最基本的数据类型:string

 

String也是过去几年我用的最多的类型,简单的使用get/set进行命令存取。这次重新看过官方文档之后,我又想起了那句话:“我工作这几年用的redis到底是个啥?他有这么多功能?”

 

下面我们来了解一下redis-String类型的基本命令。

 

String一般用来存储字符串类型的数据,如缓存数据、计数器、用户 session 等。

 

1:给一个key设置一个值:

Set key value

127.0.0.1:6379set name camellia            # 设置name
OK
127.0.0.1:6379get name
"camellia"

 

2:获取这个key的值

Get key

Set key value
127.0.0.1:6379set name camellia            # 设置name
OK
127.0.0.1:6379get name                        # 获取name
"camellia"

 

3:判断这个key是否存在

EXISTS key

127.0.0.1:6379> EXISTS name
(integer1

 

4:追加这个字符串:

APPEND key value

127.0.0.1:6379> APPEND name " world"          # 向name后边追加字符串
(integer) 14
127.0.0.1:6379> get name                               # 获取name  发现追加成功
"camellia world"

 

5:查看所有key

Keys *

127.0.0.1:6379keys *                             # 是的 我当前数据库中就一个key
1"name"

 

6:计数器+1

Incr num  每次加1

127.0.0.1:6379set num 0                # 设置num0
OK
127.0.0.1:6379get num           # 获取num
"0"
127.0.0.1:6379> incr num           # num+1
(integer) 1
127.0.0.1:6379> incr num           # num+1
(integer) 2
127.0.0.1:6379get num           # 获取num
"2"

 

decr views 每次减1

127.0.0.1:6379> decr num          # num -1
(integer) 1
127.0.0.1:6379> decr num          # num -1
(integer) 0
127.0.0.1:6379> decr num          # num -1
(integer) -1

**
**

INCRBY views 10  每次增加指定数值

127.0.0.1:6379> INCRBY num 10
(integer) 9

上边将num值更新为-1,这次+10,就是9,算的没问题。

 

DECRBY views 10  每次减少指定数值

127.0.0.1:6379> DECRBY num 4
(integer) 5

 

7:截取字符串getrange:

GETRANGE key  start end        截取字符串

127.0.0.1:6379get name                               # 获取字符串
"camellia world"
127.0.0.1:6379> GETRANGE name 1 3             # 获取从第一个开始之后的三个字符
"ame"
127.0.0.1:6379> GETRANGE name 0 -1            # 获取全部字符
"camellia world"

 

8:替换字符串setrange:

SERRANGE key2 1 xxx   # 从第一个字符之后开始替换:将第一个字符之后的三个字符替换成xxx

127.0.0.1:6379> get name
"camellia world"
127.0.0.1:6379> SETRANGE name 1 xxxxx
(integer) 14
127.0.0.1:6379> get name
"cxxxxxia world"

 

9:setex设置过期时间:

Setex key secord value

127.0.0.1:6379> setex xxx 30 hello            # 设置xxx的值为hello,有效期30秒
OK
127.0.0.1:6379> ttl xxx                              # 查看过期时间
(integer) 24

 

10:setnx不存在设置(先判断当前key是否存在,不存在则设置,存在则不设置)

Setnx  key value

127.0.0.1:6379> setnx article_1 shijianlide        # 设置article_1 设置成功
(integer) 1                                                      
127.0.0.1:6379> setnx article_1 asdfg               # 再次设置article_1 设置失败
(integer) 0
127.0.0.1:6379> get article_1                           # 获取 article_1 值
"shijianlide"

 

11:批量设置key

Mset  k1 v1 k2 v2 k3 v3

127.0.0.1:6379> mset  k1 v1 k2 v2 k3 v3         # 批量设置值
OK
127.0.0.1:6379get k1                                    # 获取上方批量设置的值
"v1"
127.0.0.1:6379get k2                                    # 获取上方批量设置的值
"v2"
127.0.0.1:6379get k3                                    # 获取上方批量设置的值
"v3"
127.0.0.1:6379> mget k1 k2 k3                        # 批量获取值
1"v1"
2"v2"
3"v3"

 

12:批量获取key

mget k1 k2 k3

127.0.0.1:6379> mget k1 k2 k3                        # 批量获取值
1) "v1"
2) "v2"
3) "v3"

 

13:批量不存在设置:

这里需要注意一个小问题:mset和mget操作是原子性的,要么一起成功,要么一起失败。

msetnx k1 v11 k2 v22 k4 v4 # 这样设置是失败的。

127.0.0.1:6379> msetnx k1 v11 k2 v22 k4 v4
(integer) 0

 

14:巧用mget/mset

set user:1 {name:zhangsan,age:3}

127.0.0.1:6379> set user:1 {name:zhangsan,age:3}          # 设置user:1 值
OK
127.0.0.1:6379> get user:1                                            # 获取user:1值
"{name:zhangsan,age:3}"

 

上方的命令可以使用mset实现

mset user:1:name zhangsan user:1:age 3

mget user:1:name user:1:age

127.0.0.1:6379> mset user:1:name zhangsan user:1:age 3      # 批量设置值
OK
127.0.0.1:6379> mget user:1:name user:1:age                       # 批量获取值
1"zhangsan"
2"3"

 

15:getset命令:

Getset 命令用于设置指定 key 的值,并返回 key 的旧值。

127.0.0.1:6379> getset db redis                # 设置db 值为redis,返回旧值null
(nil)
127.0.0.1:6379get db                            # 获取DB
"redis"
127.0.0.1:6379> getset db mysql              # 设置db 值为mysql,返回旧值redis
"redis"
127.0.0.1:6379get db                            # 获取DB
"mysql"

 

16:STRLEN返回存储字符串长度

127.0.0.1:6379> setnx name camelli
(integer) 1
127.0.0.1:6379> strlen name
(integer) 7

 

后期我们常用的大概就是setnx、get、expire等命令。

 

有好的建议,请在下方输入你的评论。