欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis操作字符串

程序员文章站 2022-04-30 22:30:20
...

这里使用的工程任然是前文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);

    }

运行结果如图所示
Redis操作字符串

Redis操作字符串

从可视化界面和代码中都可以看出StringRedisTemplete是确定的为字符串操作的工具类,而RedisTemplete不仅可以操作String,还可以操作Redis中的其他数据结构。

Redis字符串操作

1.删除

    @RequestMapping("del")
    public  void del(){
       stringRedisTemplate.delete("key2");
    }

Redis操作字符串

从这里我们也可以看到上文RedisTemplete针对字符串的操作,这里我们也可以利用更小粒度的StringRedisTemplete去操作。

2.设置新值并返回旧值

    @RequestMapping("getAndSet")
    public  void getAndSet(){
      String oldValue =   stringRedisTemplate.opsForValue().getAndSet("key1","new_value1");
      System.out.println(oldValue);
    }

可以看到控制台输出了我们之前设置的value1的值,
可视化界面中显示key1的值已经被设置成new_value1
Redis操作字符串

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);

    }

这里我们选取了超出字符串长度之外的索引,可以看到控制台,有如下输出

Redis操作字符串

从这里我们得知,获取超过字符串长度的字符时,会返回空。而不是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是支持整型和浮点型混合运算的

参考书:JavaEE 互联网轻量级框架整合开发

相关标签: redis