String数据类型
String认识
总结官方
Redis strings store sequences of bytes, including text, serialized objects, and binary arrays. As such, strings are the simplest type of value you can associate with a Redis key. They're often used for caching
Redis的String数据类型可以存储字节序列,文本,序列化对象,二进制数组等。
Values can be strings (including binary data) of every kind,A value can't be bigger than 512 MB.
值可以是任何字符串,数值大小不能大于512M
String相关命令
SET 命令
set 格式
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
Options
1. NX -- 仅设置尚未存在的key。
2. XX -- 设置已存在的key,相当于替换了原先的值。
3. GET -- 返回旧值,新值替换旧值。
4. EX -- 设置指定 的过期时间,以秒(正整数)为单位。
5. PX -- 设置指定的过期时间,单位为毫秒(正整数)。
6. KEEPTTL -- 保留与key相关的存活时间。
SET KEY VALUE
- Redis Command
- Java
127.0.0.1:6379> set k1:1 v1
OK
redisTemplate.opsForValue().set("k1:1","v1");
SET KEY VALUE NX
nx: 仅设置不存在的key
- Redis Command
- Java
# k1:1 这个key已经存在
127.0.0.1:6379> set k1:1 v2 nx
(nil)
// 返回false
redisTemplate.opsForValue().setIfAbsent("k1:1", "v2")
SET KEY VALUE XX
xx: 设置已存在的key,相当于替换了原先的值
- Redis Command
- Java
# k1:1 这个key已经存在,替换新值。
127.0.0.1:6379> set k1:1 vvvw xx
OK
127.0.0.1:6379> get k1:1
"vvvw"
// 返回true,新值替换旧值
redisTemplate.opsForValue().setIfPresent("k1:1", "v200"
SET KEY VALUE GET
get: 返回旧的值,设置新的值
- Redis Command
- Java
# k1:1 这个key已经存在,替换新值。
127.0.0.1:6379> set k1:1 123 get
v200
127.0.0.1:6379> get k1:1
"123"
// 返回旧值,新值替换旧值
redisTemplate.opsForValue().getAndSet("k1:1", "v200456")
SET KEY VALUE EX
EX: 设置过期时间,单位秒
注意
当我们设置ex后,重新 set key value,此时过期时间则是永久
当第二次set的时候,最后加一个命令keepttl: set key value keepttl
- Redis Command
- Java
# 设置k2:2 为10秒
127.0.0.1:6379> set k2:2 v3 ex 10
OK
# 还剩6秒
127.0.0.1:6379> ttl k2:2
(integer) 6
redisTemplate.opsForValue().set("k2:2","v2",10, TimeUnit.SECONDS);
批处理操作
MSET
- Redis Command
- Java
127.0.0.1:6379> mset k1 v1 k2 v2
OK
Map<String,String> mset = new HashMap<>();
mset.put("kq","vq");
mset.put("kq1","vq1");
redisTemplate.opsForValue().multiSet(mset);
MSETNX 同 nx
- Redis Command
- Java
127.0.0.1:6379> msetnx k1 v1 k2 v2
OK
Map<String,String> mset = new HashMap<>();
mset.put("kq","vq");
mset.put("kq1","vq1");
redisTemplate.opsForValue().multiSetIfAbsent(mset);