Redis的典型应用场景

一:缓存热点数据

热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,redis的性能非常优秀。

    public TbItem getTbItemByid(Long itemid) {
        //添加redis缓存
        Jedis jedis =  null;
        try {
            if(itemid != null){
                jedis = jedisPool.getResource();
                String jedisRes = jedis.get(ITEM_INFO_KEY+":"+itemid+":BASE");

                // 命中缓存
                if(StringUtils.isNotBlank(jedisRes)){
                    //取redis数据的时候,重新设置expire
                    jedis.expire(ITEM_INFO_KEY+":"+itemid+":BASE", ITEM_INFO_KEY_EXPIRE);
                    return JsonUtils.jsonToPojo(jedisRes, TbItem.class);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //关闭jedis,其实是还给连接池
            jedis.close();
        }
        // 没有命中缓存,走数据库查询
        TbItem tbItem = itemMapper.selectByPrimaryKey(itemid);
        try {
            if(tbItem!=null){
                jedis = jedisPool.getResource();
                jedis.set(ITEM_INFO_KEY+":"+itemid+":BASE", JsonUtils.objectToJson(tbItem));
                //存储redis数据的时候设置expire
                jedis.expire(ITEM_INFO_KEY+":"+itemid+":BASE", ITEM_INFO_KEY_EXPIRE);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //关闭jedis,其实是还给连接池
            jedis.close();
        } 
        return tbItem;
    }

二:计数器

诸如统计点击数、访问数、点赞数、评论数、浏览数等应用,由于单线程,可以避免并发问题,保证数据的正确性,并且100%毫秒级性能,同时开启Redis持久化,以便于持久化数据。

基于redis实现的点赞功能设计思路详解     

https://blog.csdn.net/noaman_wgs/article/details/71308036 (顶集合、踩集合)

三:单线程机制

验证前端的重复请求,可以自由扩展类似情况),可以通过redis进行过滤,比如,每次请求将Request IP、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交;再比如,限制用户登录的次数,比如一天错误登录次数10次等。

秒杀系统,基于redis是单线程特征,防止出现数据库超卖;全局增量ID生成等;

四:排行榜

谁得分高谁排名在前,比如点击率最高、活跃度最高、销售数量最高、投票最高的前10名排行等等;

java基于redis有序集合实现排行榜  

https://blog.csdn.net/weixin_41922289/article/details/100770846

五:分布式锁

使用redis可以实现分布式锁,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:

互斥性,在任意时刻,只有一个客户端能持有锁。

不会发生死锁,即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。

具有容错性,只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。

解铃还须系铃人,加锁和解锁必须是同一个客户端,客户端不能解他人加的锁。

六:Session存储

使用Redis的进行会话缓存(session cache)是非常常见的一种场景。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化,目前大量的方案均采用了redis作为session的存储方案。

你可能感兴趣的:(技术文档)