目录
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);
}