Redis常用场景(一)

来源:互联网 发布:夏玲电视直播软件 编辑:程序博客网 时间:2024/05/20 18:50

最近两个月在学习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还存在很多应用场景,如全文检索(存放反向索引),聊天队列,消息队列等,至此由于没有得到实际的应用,之后根据项目的实战会完善此部分的介绍

原创粉丝点击