SpringBoot整合Redis

目录

一、导入Spring Data Redis包

二、配置Redis数据源

三、编写配置类,创建RedisTemplate对象

四、通过RedisTemplate对象操作Redis

(一)前端代码

(二)后端代码

1、Controller类

2、Service类

五、案例


有多种redis中间件,例如
Spring Data Redis
Jedis
Lettuce

一、导入Spring Data Redis包

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

二、配置Redis数据源

spring:
  redis:
    host: 192.168.88.130
    port: 6379
    password:
    database: 0

三、编写配置类,创建RedisTemplate对象

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("开始创建redis模板类......");
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置key的序列化器,默认为 JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        objectJackson2JsonRedisSerializer.setObjectMapper(new ObjectMapper());
        redisTemplate.setValueSerializer(objectJackson2JsonRedisSerializer);

        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

四、通过RedisTemplate对象操作Redis

一个简单的小案例:网页每浏览一次,浏览数就会加一

@Autowired
RedisTemplate<String, Object> redisTemplate;

@Test
public void setArticles()  {
    ValueOperations operations = redisTemplate.opsForValue();
    Integer aid=1;
     String key = "article:aid:" + aid;
    Article article = new Article(aid, 0, 0, 0);
    // 存30分钟
    operations.set(key, article,30, TimeUnit.MINUTES);
    article = (Article) operations.get(key);
}

(一)前端代码

<html lang="en">
<head>
    <title></title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body>
<h6>阅读量:<span id="sp"></span></h6>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
    $(function () {
        $.get("/articles/incr", {
            id: 1
        }, function (res) {
            $("#sp").html(res);
        });
    });
</script>
</body>
</html>

(二)后端代码

1、Controller类

@RestController
@RequestMapping("/articles")
public class IndexController {

    @Autowired
    private ArticlesService articlesService;

    @RequestMapping("/incr")
    public Integer readAdd(HttpSession session, Integer id) {
        return articlesService.incrReadNum(id);
    }
}

2、Service类

@Service
public class ArticlesServiceImpl implements ArticlesService {

    @Autowired
    RedisTemplate<String, Object> redisTemplate;

    @Override
    public Integer incrReadNum(Integer id) {
        ValueOperations operations = redisTemplate.opsForValue();
        String key = "article:aid:" + id;
        Article article = (Article) operations.get(key);
        article.setReadNum(article.getReadNum() + 1);
        operations.set(key, article);
        return article.getReadNum();
    }
}

五、案例

zset中如何遍历score和value

@Autowired
protected StringRedisTemplate stringRedisTemplate;

@GetMapping("/invest/rank")
public Result showInvestRank() {
    Set<ZSetOperations.TypedTuple<String>> set = stringRedisTemplate
            .boundZSetOps("invest:rank").reverseRangeWithScores(0, 2);
    ArrayList<RankView> rankViews = new ArrayList<>();
    set.forEach(tuple -> {
        // 手机号
        String phone = tuple.getValue();
        // 脱敏
        if (phone != null && phone.length() == 11) {
            phone = phone.substring(0, 3) + "******" + phone.substring(9, 11);
        } else {
            phone = "***********";
        }
        // 投资金额
        BigDecimal money = BigDecimal.valueOf(tuple.getScore());
        RankView rankView = new RankView(phone, money);
        rankViews.add(rankView);
    });
    return Result.success(rankViews);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋劲豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值