redis应用场景总结

92 阅读1分钟

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);