最近两个月在学习nosql数据库,也把其用到了实际项目的开发当中,文章主要介绍redis的常用场景,也是本人在开发中的实际运用,能力有限,之后会不断完善其常用场景

场景一:计数器

redis属于缓存数据库,但其数据会存到硬盘,支持的数据存储格式非常多,之后会根据其使用场景一一列出。在流量较大的网站中需要记录某些网页的访问数量,这些数据如果使用关系型数据库存储则会显得冗余,且每次访问会访问业务数据库,增加了数据库连接的数量,使用redis能很好解决这个问题:
添加相关网站的key值,并初始化访问数为0

shardedJedis.set("visits:homepage:count",0);
访问自增操作,redis中支持根据key自增value的方法
shardedJedis.incr("visits:homepage:count");
取出访问数
shardedJedis.get("visits:homepage:count");
redis的数据会保存到磁盘,所以不用担心会随着缓存的清除导致数据的丢失

场景二:缓存

在java实际开发中,一般使用ORM框架操作数据库,存在部分数据访问较多但修改的频率很低,如每日的资讯,一般创建后不会修改。此时可以把整个资讯实体缓存到内存中,使用redis配合java中的序列化和反序列化能很好实现

//主页资讯命名常量,用于业务数据库查询
public static final String HOME_PAGE_INFORMATIONS = "home_page_informations";
//主页资讯序列化key值常量,用于Redis存储及查询
public static final byte[] HOME_PAGE_INFORMATIONS_BYTE = HOME_PAGE_INFORMATIONS.getBytes();
//获取实体序列化后的byte[]
byte[] value = ObjectUtil.objectToBytes(entity);

//写进redis缓存
shardedJedis.set(HOME_PAGE_INFORMATIONS_BYTE,value);

//根据key值获取redis的缓存数据
byte[] value1 = shardedJedis.get(HOME_PAGE_INFORMATIONS_BYTE);

//反序列化为实体对象,之后可根据业务逻辑进行相关操作
T t = (T)ObjectUtil.bytesToObject(value1);

场景三:持久层的集合操作

redis支持集合方式存储数据,有有序集合和无序集合,同时交、并、差操作在实际的业务场景中应用非常广泛,比如快速检索出具备一系列标签属性的一个集合,社交网站提前共同社区,QQ查询共同好友等功能,对于set类型,提供了sinter、sinterstore进行交集操作,对于sortedset,提供了zinter、zinterstore进行交集操作。命令十分便捷,对于不保存结果的方法sinter和zinter只需要输入待求交集的集合的key的数组就可以得到求交集后的结果集合,对于保存结果的方法,你可以将求交集后的结果集合保存到你指定key的一个集合中。

//做交集,根据业务需求,String可换成byte[]格式后反序列化得到相应实体对象
public Set<String> inter(String[] keys, String keycached){
        Set<String> result = new HashSet<String>();
        int size = keys.length;
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        try{
        if(size < 2){
            result = shardedJedis.smembers(keys[0]);
        }
        else{
            shardedJedis.sinterstore(keycached, keys);
            result = shardedJedis.smembers(keycached);
        }
        } 
        catch (Exception e){
            e.printStackTrace();
            broken = true;
        }
        finally{
            redisDataSource.returnResource(shardedJedis, broken);
        }
        return result;

    }

通过redis实现以上业务逻辑,能较大提高服务器的性能,减轻服务器访问压力,redis还存在很多应用场景,如全文检索(存放反向索引),聊天队列,消息队列等,至此由于没有得到实际的应用,之后根据项目的实战会完善此部分的介绍