Redis的数据类型String使用场景实战

本文介绍了在SpringBoot项目中如何利用Redis的String类型进行对象存储、分布式锁和计数器操作,以班级值日表自动调度为例,展示了如何使用RedisTemplate实现功能并处理可能遇到的问题。
摘要由CSDN通过智能技术生成

Redis的数据类型String使用场景实战

String模型的使用场景

常见面试题:redis在你们项目是怎么使用的?String类型说一个,还有其他用处没?

知识回顾

	// 获取redis的key为  WATCH_KEEPER_PREFIX + "wka" 的值
            String wka = redisTemplate.opsForValue().get(redisOperationUtils.WATCH_KEEPER_PREFIX + "wka");
   // 设置value的值,一般情况不用设置过期时间
            redisTemplate.opsForValue().set(redisOperationUtils.WATCH_KEEPER_PREFIX + "wka", "xxx");

使用场景

1,对象存储,key可以是用户的id,value:对象的JSON对象
2,分布式锁,key是锁的唯一值,value是一个脚本,比如lua脚本
3,可以做计数器使用 ,比如在微信朋友圈点赞
incr wxarticle:readcount:{朋友圈内容id}
get wxarticle:readcount:{朋友圈内容id}

代码实战:

1,场景是做一个班级值日表,每天负责擦黑板,从第一个人开始轮有生成,老师可以在系统中调动值日人员的顺序。
2,因为班级人数是有限,可以放到一个数组里面,写一个定时任务自动生成下一个月值日计划,并在入库前记录当前待添加数据库最后一条值班人姓名
3,上代码

依赖:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

注入实现:

	@Autowired
    private StringRedisTemplate redisTemplate;
    
	 @Override
    public void automaticGenerationWatchBill(LocalDate startDate, LocalDate endDate) {
		List<WatchBillEntity> entityList = new ArrayList<>();
        // 1、获取redis上次最后一天 班级值班人员,如果为空从头开始
        String lastStudent = redisTemplate.opsForValue().get(redisOperationUtils.WATCH_BILL + "student");
        // 名字为空 默认从头开始
        String knownName = Optional.ofNullable(lastStudent).orElse("xxx");
        
        // 如果结束时间 > 开始时间就一直执行
        LocalDate currentDate = startDate;
        Date currentTime = new Date();
        while (!currentDate.isAfter(endDate)) {
           	//	组装值班学生数据..
            // 日期加1
            currentDate = currentDate.plusDays(1);
            entityList.add(entity);
        }
        // 批量插入
        if (!CollectionUtils.isEmpty(entityList)) {
            watchBillMapper.batchInsertWatchBill(entityList);
            // 设置最后一天 值班同学名字
            redisTemplate.opsForValue().set(redisOperationUtils.WATCH_BILL + "student", entityList.get(entityList.size() - 1).getWathchStudent());
        }
    }

遇到的问题:

1,如果问题,value对象如果开始不存在话,需要给一个初始值,

喜欢我的文章的话,点个阅读或者点个点赞,是我编写博客的动力,持续更新中

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值