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 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
注意当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,相当于替换了原先的值
与不设置xx区别是: 若不设置xx,set 相同的key 若key存在则覆盖,不存在则创建
设置了xx: 仅当key存在的时候,才会覆盖。原先key不存在则不会set成功。
- 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
若是有的key原先存在,有的key本身不存在 使用MSETNX不会成功
- 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);
MGET 批处理获取
- 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);
范围处理
SETRANGE
- Redis Command
- Java
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> setrange k1 2 hello
(integer) 7
127.0.0.1:6379> get k1
"v1hello"
// 按照偏移量 修改
redisTemplate.opsForValue().set("k2","kk",2);
GETRANGE
- Redis Command
- Java
# 0 ~ -1 查出来全部
127.0.0.1:6379> getrange k1 0 -1
"v1kkelo"
redisTemplate.opsForValue().get("k1",0,3);