字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。
- 图片使用base64的方式转为字符串存入redis
- 而对象可以序列化后存入redis
key | value |
city | 北京上海深圳(string) |
常用操作:
1、set
将字符串值 value 设置到 key 中
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 vvvvvvvvvvvvvvvvvvvvvvv2
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
可以重写key对应的value的值:
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k1 vvvvvvvvv1
OK
2、get
获取 key 中设置的字符串值
我们刚才设置了半天value,那如何查看key对应的value呢?
127.0.0.1:6379> get k1
"vvvvvvvvv1"
127.0.0.1:6379> get k2
"vvvvvvvvvvvvvvvvvvvvvvv2"
127.0.0.1:6379> get k100
(nil)
3、incr
将 key 中储存的数字值加1,如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCR 操作(只能对数字类型的数据操作)
127.0.0.1:6379> INCR k1 #对之前的k1进行incr,会报错,因为不是数字类型
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> INCR num
(integer) 2
127.0.0.1:6379> INCR num
(integer) 3
127.0.0.1:6379> INCR num
(integer) 4
127.0.0.1:6379> INCR num
(integer) 5
4、decr
将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执行 DECR 操作(只能对数字类型的数据操作)
127.0.0.1:6379> DECR num
(integer) 4
127.0.0.1:6379> DECR num
(integer) 3
127.0.0.1:6379> DECR num
(integer) 2
127.0.0.1:6379> DECR num
(integer) 1
127.0.0.1:6379> DECR num
(integer) 0
127.0.0.1:6379> DECR num
(integer) -1
5、setex
set expire的简写,设置key的值 ,并将 key 的生存时间设为 seconds (以秒为单位)
- 和expire的区别在于:expire是对以有的key设置生存时间,而setex是在创建key的同时设置生存时间
127.0.0.1:6379> SETEX k3 10 v3 #设置k3 生存时间10秒 值为v3
OK
127.0.0.1:6379> TTL k3
(integer) 5
127.0.0.1:6379> TTL k3
(integer) 3
127.0.0.1:6379> TTL k3
(integer) -2
这个是一个缓存的效果,例如在实际使用中,设置一个key让他在一小时后过期,达到缓存效果。
6、setnx
setnx 是 set if not exists 的简写,如果key不存在,则 set 值,存在则不设置值
127.0.0.1:6379> SETNX k1 v1 #k1已经存在,所以创建失败
(integer) 0
127.0.0.1:6379> SETNX k4 v4 #k4不存咋,创建成功
(integer) 1
6、getset
设置 key 的值为 value ,并返回 key 的旧值
127.0.0.1:6379> get k1
"vvvvvvvvv1"
127.0.0.1:6379> getset k1 v1
"vvvvvvvvv1"
127.0.0.1:6379> get k1
"v1"
7、其他命令
- strlen:返回 key 所储存的字符串值的长度
-
127.0.0.1:6379> strlen k1 (integer) 2
-
- append:如果 key 存在且是字符串, 则将 value 追加到 key 原来旧值的末尾,如果 key 不存在, 则将key 设置值为 value
-
127.0.0.1:6379> APPEND k1 1111 (integer) 6 127.0.0.1:6379> get k1 "v11111"
-
- incrby:将 key 所储存的值加上增量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCRBY 命令
- decrby:将 key 所储存的值减去减量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 DECRBY 命令
-
127.0.0.1:6379> INCRBY num 5 (integer) 4 127.0.0.1:6379> INCRBY num 5 (integer) 9 127.0.0.1:6379> INCRBY num 5 (integer) 14 127.0.0.1:6379> DECRBY num 5 (integer) 9 127.0.0.1:6379> DECRBY num 5 (integer) 4 127.0.0.1:6379> DECRBY num 5 (integer) -1
-
- getrange:获取 key 中字符串值从 start 开始 到 end 结束 的子字符串
-
127.0.0.1:6379> get k1 "v11111" 127.0.0.1:6379> GETRANGE k1 1 3 "111"
-
- setrange:从指定的位置开始将key的值替换为新的字符串,比如旧值helloworld,setrange 5 redis,将从第5个下标位置往后开始替换为新的字符串redis,最终结果:helloredis
-
127.0.0.1:6379> SETRANGE k1 3 234 (integer) 6 127.0.0.1:6379> get k1 "v11234"
-
- mset:同时设置一个或多个 key-value 对
- mget:获取所有(一个或多个)给定 key 的值
- msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在时才能设置成功,否则只要有一个key存在都会失败