这里我们来学习redis的第一个数据类型,也是最基本的数据类型:string
String也是过去几年我用的最多的类型,简单的使用get/set进行命令存取。这次重新看过官方文档之后,我又想起了那句话:“我工作这几年用的redis到底是个啥?他有这么多功能?”
下面我们来了解一下redis-String类型的基本命令。
String一般用来存储字符串类型的数据,如缓存数据、计数器、用户 session 等。
1:给一个key设置一个值:
Set key value
127.0.0.1:6379> set name camellia # 设置name
OK
127.0.0.1:6379> get name
"camellia"
2:获取这个key的值
Get key
Set key value
127.0.0.1:6379> set name camellia # 设置name
OK
127.0.0.1:6379> get name # 获取name
"camellia"
3:判断这个key是否存在
EXISTS key
127.0.0.1:6379> EXISTS name
(integer) 1
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:6379> keys * # 是的 我当前数据库中就一个key
1) "name"
6:计数器+1
Incr num 每次加1
127.0.0.1:6379> set num 0 # 设置num为0
OK
127.0.0.1:6379> get 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:6379> get 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:6379> get 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:6379> get k1 # 获取上方批量设置的值
"v1"
127.0.0.1:6379> get k2 # 获取上方批量设置的值
"v2"
127.0.0.1:6379> get 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:6379> get db # 获取DB
"redis"
127.0.0.1:6379> getset db mysql # 设置db 值为mysql,返回旧值redis
"redis"
127.0.0.1:6379> get 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等命令。
有好的建议,请在下方输入你的评论。