Springdata 对非关系型数据库及关系型数据库都提供了支持
@SpringBootTest
class RedisApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Autowired
StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
User user = new User();
user.setUsername("javaboy");
user.setAddress("www.javaboy.org");
ValueOperations ops = redisTemplate.opsForValue();
ops.set("u", user);
User u = (User) ops.get("u");
System.out.println("u = " + u);
}
@Test
void test1() throws JsonProcessingException {
ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
User user = new User();
user.setUsername("javaboy");
user.setAddress("www.javaboy.org");
ObjectMapper om = new ObjectMapper();
String s = om.writeValueAsString(user);
ops.set("u1", s);
String u1 = ops.get("u1");
User user1 = om.readValue(u1, User.class);
System.out.println("user1 = " + user1);
}
}
具体应用
session共享,主流方案就是redis
@RestController
public class HelloController {
@Value("${server.port}")
Integer port;
@GetMapping("/set")
public String set(HttpSession session) {
session.setAttribute("javaboy", "www.javaboy.org");
return String.valueOf(port);
}
@GetMapping("/get")
public String get(HttpSession session) {
String javaboy = (String) session.getAttribute("javaboy");
return javaboy + ":" + port;
}
}
负载均衡
令牌机制,请求一个接口完成之后删除令牌,再次请求判断令牌
redis接口处理幂等性,拦截器实现,
//@Component
public class IdempotentInterceptor implements HandlerInterceptor {
@Autowired
TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
return true;
}
Method method = ((HandlerMethod) handler).getMethod();
AutoIdempotent idempotent = method.getAnnotation(AutoIdempotent.class);
if (idempotent != null) {
try {
return tokenService.checkToken(request);
} catch (IdempotentException e) {
throw e;
}
}
return true;
}
}
AOP实现 方式
@Component
@Aspect
public class IdempotentAspect {
@Autowired
TokenService tokenService;
@Pointcut("@annotation(org.javaboy.idempontent.anno.AutoIdempotent)")
public void pc1() {
}
@Before("pc1()")
public void before() throws IdempotentException {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
try {
tokenService.checkToken(request);
} catch (IdempotentException e) {
throw e;
}
}
}