当前位置: 首页 > article >正文

Redis集成到SpingBoot 的数据结构常见操作

一.环境配置

1.依赖注入

 

2.yaml文件配置 

3.启动本地Redis服务

(或在虚拟机上启动,这里为了方便演示在本地启动)

4.启动成功案例 

5.创建一个Controller我们开始演示 

@RestController
public class MyController {
 @Autowired
 private StringRedisTemplate redisTemplate;
 
}

二 String操作

  @GetMapping("/testString")
    public String test1String() throws JsonProcessingException {
        // 存储字符串
            //key为键,value为值,这里就像Map<String,String>
        redisTemplate.opsForValue().set("greeting", "Hello, World!");
            //获取key对应的值
        String valueString = redisTemplate.opsForValue().get("greeting");
        log.info("valueString:"+valueString);
            //删除key
        redisTemplate.delete("greeting");
        String valueString2 = redisTemplate.opsForValue().get("greeting");
        log.info("valueString2:"+valueString2);

        // 存储整数
        int counter = 42;
        redisTemplate.opsForValue().set("counter", String.valueOf(counter));
        String valueInteger = redisTemplate.opsForValue().get("counter");
        log.info("valueInteger:"+valueInteger);

        // 存储字节数组
        byte[] binaryData = "some binary data".getBytes();
        redisTemplate.opsForValue().set("binary:key", Arrays.toString(binaryData));
        String valueArray = redisTemplate.opsForValue().get("binary:key");
        log.info("valueArray:"+valueArray);

        // 存储 JSON 对象
        User user = new User("John", "123");
            //Json序列化
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = objectMapper.writeValueAsString(user);
        redisTemplate.opsForValue().set("user:123", jsonString);
        String valueJson = redisTemplate.opsForValue().get("user:123");
        log.info("valueJson:"+valueJson);

    /*    //存储空值null
        redisTemplate.opsForValue().set("key", null);//报错:Value must not be null
        String valueNull = redisTemplate.opsForValue().get("key");
        log.info("valueNull:"+valueNull);*/
        return "OK";
    }

 运行结果

 

三.List操作

    @GetMapping("/testList")
    @ResponseBody
    public String testList() {
        //清空redis中所有数据,防止影响其他测试,慎用
        redisTemplate.getConnectionFactory().getConnection().flushAll();
        String ListNull = redisTemplate.opsForList().leftPop("key");
        System.out.println("ListNull:  "+ListNull);
        //存储一个值,键是key,值是a
        redisTemplate.opsForList().leftPush("key", "a");
        //存储多个值,但是键值键一样都是key,值是b,c,d
        redisTemplate.opsForList().leftPushAll("key", "b", "c", "d");
        //获取第一个元素
        String firstElement = redisTemplate.opsForList().leftPop("key");
        System.out.println("frist:"+firstElement);
        //获取列表key的第2到第3个元素(索引从0开始),但是这里获取之后并未取出来
        List<String> values = redisTemplate.opsForList().range("key", 1, 2);
        System.out.println(values);
        //获取列表key的最后一个元素
        String finalElement = redisTemplate.opsForList().leftPop("key");
        System.out.println("finalElement:  "+finalElement);
        return "OK";
    }

运行结果

ListNull:  null
frist:d
[b, a]
finalElement:  c

注意:leftPush()是往左存储,最终存储后顺序是的,d,c,b,a

 

四.Hash操作

 @GetMapping("/testHashmap")
    @ResponseBody
    public String testHashmap() {
        //清空redis中所有数据,防止影响其他测试,慎用
        redisTemplate.getConnectionFactory().getConnection().flushAll();
        //向Redis中插入一个Hash键值对,键为 "key",字段为 "name",值为 "zhangsan"
        redisTemplate.opsForHash().put("key", "name", "zhangsan");
        //从Redis中获取刚刚插入的Hash值
        String value = (String) redisTemplate.opsForHash().get("key", "name");
        System.out.println(value);
        //删除Hash中的字段 "name"
        redisTemplate.opsForHash().delete("key", "name");
        //检查字段 "name" 是否还存在于Hash中
        boolean ok = redisTemplate.opsForHash().hasKey("key", "name");
        System.out.println(ok);
        //删除整个Hash键 "key"
        redisTemplate.delete("key");
        return "OK";
    }

运行结果

zhangsan
false

 

五.Set

 @GetMapping("/testSet")
    @ResponseBody
    public String testSet() {
        //清空redis中所有数据,防止影响其他测试,慎用
        redisTemplate.getConnectionFactory().getConnection().flushAll();
        //向Redis的key中添加三个元素:aaa、bbb、ccc
        redisTemplate.opsForSet().add("key", "aaa", "bbb", "ccc");
        //检查key中是否包含aaa
        boolean ok = redisTemplate.opsForSet().isMember("key", "aaa");
        System.out.println(ok);
        //从key中移除aaa
        redisTemplate.opsForSet().remove("key", "aaa");
        //获取key中剩余元素的数量
        long n = redisTemplate.opsForSet().size("key");
        System.out.println(n);
        //删除key
        redisTemplate.delete("key");
        return "OK";
    }

运行结果

true
2

 

六.ZSet

 @GetMapping("/testZSet")
    @ResponseBody
    public String testZSet() {
        //向Redis中名为key的有序集合添加三个成员:吕布、赵云和典韦,分别赋予不同的分数
        redisTemplate.opsForZSet().add("key", "吕布", 100);
        redisTemplate.opsForZSet().add("key", "赵云", 98);
        redisTemplate.opsForZSet().add("key", "典⻙", 95);
        //获取并打印分数最高的前3个成员,切记ZSet是有序集合
        Set<String> values = redisTemplate.opsForZSet().range("key", 0, 2);
        System.out.println(values);
        //统计并打印分数在95到100之间的成员数量
        long n = redisTemplate.opsForZSet().count("key", 95, 100);
        System.out.println(n);
        redisTemplate.delete("key");
        return "OK";
    }

运行结果 

[典⻙, 赵云, 吕布]
3


http://www.kler.cn/a/463087.html

相关文章:

  • 每天40分玩转Django:Django Celery
  • UE5 Debug的一些心得
  • 项目优化之策略模式
  • 浏览器选中文字样式
  • P5289 [十二省联考 2019] 皮配 做题记录
  • el-table 实现纵向多级表头
  • Facebook广告无法投放?查看原因与解决方案
  • ChatGPT实战100例 - (22) 影刀需求大师
  • 开源存储详解-分布式存储与ceph
  • 千里马2024年终总结-android framework实战
  • 电商数据API接口的智能化与自动化发展探索
  • C#联合体
  • 【手搓一个脚本语言】五、用C语言抽象语法树AST解析简单的表达式字符串(括号)
  • Adobe Illustrator 中裁剪图像的最快方案
  • 使用策略模式时的一个生效问题
  • 4.微服务灰度发布落地实践(消息队列增强)
  • NestJS 性能优化:从应用到部署的最佳实践
  • FPGA的FIFO
  • 数据挖掘——认识数据
  • SQL-Server链接服务器访问Oracle数据
  • 【蓝桥杯】:蓝桥杯之路径之谜
  • 机器人C++开源库The Robotics Library (RL)使用手册(四)
  • 关于ElasticSearch
  • 搭建医疗产品行业知识中台的手册
  • 深度学习在文本情感分析中的应用
  • 基于Redis的分布式锁