文章目录
1 String 介绍
String 类型,也就是字符串类型,是Redis中最简单的存储类型。
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
● string:普通字符串
● int:整数类型,可以做自增.自减操作
● float:浮点类型,可以做自增.自减操作
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过 512 MB。
KEY | VALUE |
---|---|
name | snow |
age | 20 |
salary | 600000.0 |
2 命令
🍎🍎String的常见命令有🍎🍎:
● SET
:添加或者修改已经存在的一个 String 类型的键值对
● GET
:根据 key 获取 String 类型的 value
● MSET
:批量添加多个String类型的键值对
● MGET
:根据多个 key 获取多个 String 类型的 value
● INCR
:让一个整型的key自增1
● INCRBY
:让一个整型的 key 自增并指定步长,例如:incrby num 2 让num值自增2
● INCRBYFLOAT
:让一个浮点类型的数字自增并指定步长
● SETNX
:添加一个 String 类型的键值对,前提是这个 key 不存在,否则不执行
● SETEX
:添加一个 String 类型的键值对,并且指定有效期
3 对应 RedisTemplate API
❄️❄️ 3.1 添加缓存
//1、通过redisTemplate设置值
redisTemplate.boundValueOps("StringKey").set("StringValue");
redisTemplate.boundValueOps("StringKey").set("StringValue",1, TimeUnit.MINUTES);
//2、通过BoundValueOperations设置值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
stringKey.set("StringValue",1, TimeUnit.MINUTES);
//3、通过ValueOperations设置值
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
ops.set("StringValue","StringVaule",1, TimeUnit.MINUTES);
//4(SETNX + SETEX):这个key不存在执行 存在则不执行,多用于互斥锁
ops.setIfAbsent("key", "value", 10, TimeUnit.SECONDS)
❄️❄️ 3.2 设置过期时间(单独设置)
redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("StringKey",1,TimeUnit.MINUTES);
不建议使用单独设置过期时间的API, 可以使用 3.1 中的第一个演示,在设置值的同时设置过期时间.
❄️❄️ 3.3 获取缓存值
//1、通过redisTemplate设置值
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();
//2、通过BoundValueOperations获取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();
//3、通过ValueOperations获取值
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");
❄️❄️ 3.4 删除key
Boolean result = redisTemplate.delete("StringKey");
❄️❄️ 3.5 顺序递增
redisTemplate.boundValueOps("StringKey").increment(1L);
该API会返回递增后的值. 如果KEY对应的值不存在会创建之并返回1
❄️❄️ 3.6 顺序递减
redisTemplate.boundValueOps("StringKey").increment(-3L);
⛄4 以下是一些常用的API
ValueOperations ops = redisTemplate.opsForValue();
// 单独设置有效期(不推荐单独用)
ops.expire("StringKey",1,TimeUnit.MINUTES);
// 设置值 and 有效期(推荐这种)
ops.set("key", "value", 1, TimeUnit.MINUTES);
// 操作数值 增加 减少(INCR INCRBY)
ops.increment("key", 1);
ops.increment("key", -1);
// (SETNX + SETEX):这个key不存在执行 存在则不执行,多用于互斥锁
ops.setIfAbsent("key", "value", 10, TimeUnit.SECONDS)
// 获取缓存值
ops.get("StringKey");
⛄5 应用场景
下面列举了一些Redis String类型的应用场景:
-
缓存:使用String保存缓存信息,如用户会话状态、web页面片段、数据库查询结果等。
-
计数器:使用incr/decr命令实现对计数器的自增和自减,如网站访问量、文件下载次数、商品销售量等。
-
消息队列:使用LPUSH/RPUSH命令实现队列的入队(左插入)和出队(右取出),同时使用BLPOP/BRPOP命令进行阻塞式弹出等待的消息。
-
id生成器:使用incr命令实现简单id生成,解决分布式系统节点间数据生成的问题。
-
分布式锁:通过 SETNX 命令结合时间戳或随机字符串等实现互斥锁的获取和释放,避免并发写操作时数据的不一致。
-
商品价格:使用String保存商品价格,动态更新价格避免价格无法及时调整。
-
Session共享:将session信息以key-value方式保存到redis中并设置过期时间,完成session共享功能,类似于分布式缓存。