1. redis配置
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Autowired
private RedisTemplate redisTemplate;
2. redis应用场景
2.1 购物车
添加购物车
Boolean hasKey = redisTemplate.opsForHash().getOperations().hasKey(key);
this.redisTemplate.opsForHash().put(key, obj.getProductId().toString(), obj.getAmount());
修改购物车的数量
this.redisTemplate.opsForHash().put(key, obj.getProductId().toString(), obj.getAmount());
删除购物车
this.redisTemplate.opsForHash().delete(key, productId.toString());
查所有购物车
long size = this.redisTemplate.opsForHash().size(key);
Map<String, Integer> map = this.redisTemplate.opsForHash().entries(key);
controller中引入HttpServletRequest
@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
public String getCookiesCartId(){
//第一步:先检查cookies是否有cartid
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
if(cookie.getName().equals("cartId")){
return cookie.getValue();
}
}
}
//第二步:cookies没有cartid,直接生成全局id,并设置到cookie里面
//生成全局唯一id
long id=this.idGenerator.incrementId();
//设置到cookies
Cookie cookie=new Cookie("cartId",String.valueOf(id));
response.addCookie(cookie);
return id+"";
}
2.2 短连接的开发
采用的是hash的数据结构
@GetMapping(value = "/encode")
public String encode(String url) {
//一个长链接url转换为4个短加密串key
String [] keys= ShortUrlGenerator.shortUrl(url);
//任意取出其中一个,我们就拿第一个
String key=keys[0];
//用hash存储,key=加密串,value=原始url
this.redisTemplate.opsForHash().put(SHORT_URL_KEY,key,url);
log.info("长链接={},转换={}",url,key);
return "http://127.0.0.1:9090/"+key;
}
response.sendRedirect(url);
2.3 set结构开发京东京豆的发放
//随机取1次。
String object = (String) this.redisTemplate.opsForSet().randomMember(Constants.PRIZE_KEY);