Redis操作字符串
这里使用的工程任然是前文SpringBoot对非关系型数据库NoSql的支持,只不过此处使用了远程服务器上的Redis服务器
RedisTemplete和StringRedisTemplete的区别
在这一篇文章中我们也分别尝试过RedisTemplete和StringRedisTemplete来作为操作数据的工具类,但是,我们并没有说明他们的区别,因此下面我们将尝试区分两者在操作数据的时候区别,代码如下
@Resource
RedisTemplate redisTemplate;
@Resource
StringRedisTemplate stringRedisTemplate;
@RequestMapping("/stringOps")
public void stringOps(){
redisTemplate.opsForValue().set("key1","value1");
stringRedisTemplate.opsForValue().set("key2","value2");
}
@RequestMapping("getValue")
public void getValue(){
String value1 = stringRedisTemplate.opsForValue().get("key1");
String value2 = (String) redisTemplate.opsForValue().get("key2");
System.out.println(value1);
System.out.println(value2);
}
运行结果如图所示
从可视化界面和代码中都可以看出StringRedisTemplete是确定的为字符串操作的工具类,而RedisTemplete不仅可以操作String,还可以操作Redis中的其他数据结构。
Redis字符串操作
1.删除
@RequestMapping("del")
public void del(){
stringRedisTemplate.delete("key2");
}
从这里我们也可以看到上文RedisTemplete针对字符串的操作,这里我们也可以利用更小粒度的StringRedisTemplete去操作。
2.设置新值并返回旧值
@RequestMapping("getAndSet")
public void getAndSet(){
String oldValue = stringRedisTemplate.opsForValue().getAndSet("key1","new_value1");
System.out.println(oldValue);
}
可以看到控制台输出了我们之前设置的value1的值,
可视化界面中显示key1的值已经被设置成new_value1
3.求字符串长度
代码
@RequestMapping("length")
public void length(){
Long length = stringRedisTemplate.opsForValue().size("key1");
System.out.println(length);
Long length2 = stringRedisTemplate.opsForValue().size("key2");
System.out.println(length2);
}
可以看到控制台输出了10和0,由此可以得知,当获取Redis中不存在的key值时也是可以的,但是此时的长度为0。
4.获取字符串长度内某个范围的值
@RequestMapping("getRange")
public void getRange(){
String str1 = stringRedisTemplate.opsForValue().get("key1",0,3);
System.out.println(str1);
String str2 = stringRedisTemplate.opsForValue().get("key1",15,20);
System.out.println(str2);
}
这里我们选取了超出字符串长度之外的索引,可以看到控制台,有如下输出
从这里我们得知,获取超过字符串长度的字符时,会返回空。而不是null
5.追加字符串到原字符串末尾
@RequestMapping("append")
public void append(){
Integer length = stringRedisTemplate.opsForValue().append("key1","_append");
System.out.println(length);
}
控制台中输出17。即添加了字符之后的长度
上述只是对Redis诸多操作方法中最常用的几种做了尝试,大家可以去尝试更多的api
6.Redis对整型或者浮点型数据的简单计算
Redis的计算能力较弱,目前只能针对浮点数或者整数做一些简单的计算,例如
6.1 Redis针对整数和浮点数的加法
@RequestMapping("intOps")
public void intOps(){
stringRedisTemplate.opsForValue().set("i","9");
stringRedisTemplate.opsForValue().increment("i",10);
stringRedisTemplate.opsForValue().set("f","9.0");
stringRedisTemplate.opsForValue().increment("f",10.0);
}
可以在可视化工具中看到Redis进行了加法运算,显示19和19.1
我们依然可以尝试一下整型和浮点型之间是否可以进行混合的加法运算,有如下代码
stringRedisTemplate.opsForValue().increment("i",10.0);
stringRedisTemplate.opsForValue().increment("f",10);
可以在可视化工具中看到,所有的数据均为29,并没有显示29.0。这里的具体Redis进行了什么操作,我们并不深究,我们可以探索到Redis是支持整型和浮点型混合运算的