前言
RedisTemplat提供了对redis的各种操作
具体实现细节
1、创建一个Maven项目,在pom.xml中添加RedisTemplat的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2、在application.properties中配置redis连接
#redis连接
spring.redis.database=1 #具体操作哪个数据库
spring.redis.host=127.0.0.1
spring.redis.port=6379
3、实现方式(controller)这里直接使用controller层来实现业务层,不在写接口层和业务层。
//注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
/**
* 用户刚进入的时候
* 判断redis里面是否存在用户喜爱列表,如果没有
* 则添加喜爱列表
* 有
* 则不添加服务列表
* 不管是刚添加的还是以前就存在的
* 都可以查出用户喜爱前三的电影类型(用户第一次进来喜好刚创建都为0,系统默认排序查询)
*/
@RequestMapping("express")
@ResponseBody
public String express(String phone){
Boolean servers = redisTemplate.hasKey(phone);
//判断redis里面是否存在用户喜爱的电影类型列表
if(servers == false){
//没有,添加数据到redis
redisTemplate.boundZSetOps(phone).add("搞笑",0);
redisTemplate.boundZSetOps(phone).add("综艺",0);
redisTemplate.boundZSetOps(phone).add("恐怖",0);
redisTemplate.boundZSetOps(phone).add("歌舞",0);
redisTemplate.boundZSetOps(phone).add("历史",0);
redisTemplate.boundZSetOps(phone).add("古装",0);
redisTemplate.boundZSetOps(phone).add("科幻",0);
redisTemplate.boundZSetOps(phone).add("仙侠",0);
}
//获取用户点击率前三的电影类型,只显示电影类型
Set<String> server = redisTemplate.boundZSetOps(phone).reverseRange(0,2);
//显示电影类型和点击率(次数)
Set<String> score = redisTemplate.boundZSetOps(phone).reverseRangeWithScores(0,2);
//转换格式
String scores = JsonUtil.obj2String(score);
String result = JsonUtil.obj2String(server);
return result;
}
4、JsonUtil转换格式工具
package com.yy.util;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JsonUtil {
private static ObjectMapper objectMapper = new ObjectMapper();
//对象转字符串
public static <T> String obj2String(T obj) {
if (obj == null) {
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//字符串转对象
public static <T> T string2Obj(String str, Class<T> clazz) {
if (str == null || str.isEmpty() || clazz == null) {
return null;
}
try {
return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
5、使用接口测试工具进行测试
6、看一下redis里面的数据
7、查询爱好的完成了,下面开始获取用户浏览的次数
/**
*记录用户点击意图的次数
*每查看一次电影的类型
*电影的对应类型的浏览量就会加1
* @param phone
* @param serverType
*/
@RequestMapping("serverList")
@ResponseBody
public void serverList(String phone,String serverType){
switch (serverType){
case "搞笑":
redisTemplate.boundZSetOps(phone).incrementScore("搞笑",1);
break;
case "综艺":
redisTemplate.boundZSetOps(phone).incrementScore("综艺",1);
break;
case "恐怖":
redisTemplate.boundZSetOps(phone).incrementScore("恐怖",1);
break;
case "歌舞":
redisTemplate.boundZSetOps(phone).incrementScore("歌舞",1);
break;
case "历史":
redisTemplate.boundZSetOps(phone).incrementScore("历史",1);
break;
case "古装":
redisTemplate.boundZSetOps(phone).incrementScore("古装",1);
break;
case "科幻":
redisTemplate.boundZSetOps(phone).incrementScore("科幻",1);
break;
case "仙侠":
redisTemplate.boundZSetOps(phone).incrementScore("仙侠",1);
break;
}
}
8、用接口测试工具测试
9、然后返回第一个查询用户喜好电影类型的接口
10、再看一下redis数据库里面的值
到此结束!!!