redis怎么用在项目上

redis怎么用在项目上

想起自己以前想把Redis整合到JavaWeb项目中,网上搜了很多教程都不全面,现在我终于弄明白了,所以想在这分享一下。

20180416191206756.png

1.Redis的安装

我这里就不讲了,网上有很多教程,windows,Linux,我自己的是搭建在服务器上的。

图形化连接

20180416185933706.png

向业务逻辑中添加缓存

1.1. 接口封装

常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类。

1.1.1. 接口定义

##jedisClient

package cn.e3mall.common.jedis;import java.util.List;public interface JedisClient {String set(String key, String value);String get(String key);Boolean exists(String key);Long expire(String key, int seconds);Long ttl(String key);Long incr(String key);Long hset(String key, String field, String value);String hget(String key, String field);Long hdel(String key, String... field);Boolean hexists(String key, String field);List hvals(String key);Long del(String key);}

登录后复制

###JedisClientPool

package cn.e3mall.common.jedis;import java.util.List;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public class JedisClientPool implements JedisClient {private JedisPool jedisPool;public JedisPool getJedisPool() {return jedisPool;}public void setJedisPool(JedisPool jedisPool) {this.jedisPool = jedisPool;}@Overridepublic String set(String key, String value) {Jedis jedis = jedisPool.getResource();String result = jedis.set(key, value);jedis.close();return result;}@Overridepublic String get(String key) {Jedis jedis = jedisPool.getResource();String result = jedis.get(key);jedis.close();return result;}@Overridepublic Boolean exists(String key) {Jedis jedis = jedisPool.getResource();Boolean result = jedis.exists(key);jedis.close();return result;}@Overridepublic Long expire(String key, int seconds) {Jedis jedis = jedisPool.getResource();Long result = jedis.expire(key, seconds);jedis.close();return result;}@Overridepublic Long ttl(String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.ttl(key);jedis.close();return result;}@Overridepublic Long incr(String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.incr(key);jedis.close();return result;}@Overridepublic Long hset(String key, String field, String value) {Jedis jedis = jedisPool.getResource();Long result = jedis.hset(key, field, value);jedis.close();return result;}@Overridepublic String hget(String key, String field) {Jedis jedis = jedisPool.getResource();String result = jedis.hget(key, field);jedis.close();return result;}@Overridepublic Long hdel(String key, String... field) {Jedis jedis = jedisPool.getResource();Long result = jedis.hdel(key, field);jedis.close();return result;}@Overridepublic Boolean hexists(String key, String field) {Jedis jedis = jedisPool.getResource();Boolean result = jedis.hexists(key, field);jedis.close();return result;}@Overridepublic List hvals(String key) {Jedis jedis = jedisPool.getResource();List result = jedis.hvals(key);jedis.close();return result;}@Overridepublic Long del(String key) {Jedis jedis = jedisPool.getResource();Long result = jedis.del(key);jedis.close();return result;}}

登录后复制

###JedisClientCluster

package cn.e3mall.common.jedis;import java.util.List;import redis.clients.jedis.JedisCluster;public class JedisClientCluster implements JedisClient {private JedisCluster jedisCluster;public JedisCluster getJedisCluster() {return jedisCluster;}public void setJedisCluster(JedisCluster jedisCluster) {this.jedisCluster = jedisCluster;}@Overridepublic String set(String key, String value) {return jedisCluster.set(key, value);}@Overridepublic String get(String key) {return jedisCluster.get(key);}@Overridepublic Boolean exists(String key) {return jedisCluster.exists(key);}@Overridepublic Long expire(String key, int seconds) {return jedisCluster.expire(key, seconds);}@Overridepublic Long ttl(String key) {return jedisCluster.ttl(key);}@Overridepublic Long incr(String key) {return jedisCluster.incr(key);}@Overridepublic Long hset(String key, String field, String value) {return jedisCluster.hset(key, field, value);}@Overridepublic String hget(String key, String field) {return jedisCluster.hget(key, field);}@Overridepublic Long hdel(String key, String... field) {return jedisCluster.hdel(key, field);}@Overridepublic Boolean hexists(String key, String field) {return jedisCluster.hexists(key, field);}@Overridepublic List hvals(String key) {return jedisCluster.hvals(key);}@Overridepublic Long del(String key) {return jedisCluster.del(key);}}

登录后复制

配置:applicationContext-redis.xml

<!--        -->

登录后复制

 封装代码测试

@Testpublic void testJedisClient() throws Exception {//初始化Spring容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");//从容器中获得JedisClient对象JedisClient jedisClient = applicationContext.getBean(JedisClient.class);jedisClient.set("first", "100");String result = jedisClient.get("first");System.out.println(result);}

登录后复制

添加缓存

1.1.1. 功能分析

查询内容列表时添加缓存。

1、查询数据库之前先查询缓存。

2、查询到结果,直接响应结果。

3、查询不到,缓存中没有需要查询数据库。

4、把查询结果添加到缓存中。

5、返回结果。

向redis中添加缓存:Key:cidValue:内容列表。需要把java对象转换成json。 使用hash对key进行归类。HASH_KEY:HASH            |--KEY:VALUE            |--KEY:VALUE            |--KEY:VALUE            |--KEY:VALUE

登录后复制

注意:添加缓存不能影响正常业务逻辑。

代码实现(在服务层实现)

@Autowiredprivate JedisClient jedisClient;

登录后复制

@Value("${CONTENT_LIST}")private String CONTENT_LIST;@Overridepublic E3Result addContent(TbContent content) {//将内容数据插入到内容表content.setCreated(new Date());content.setUpdated(new Date());//插入到数据库contentMapper.insert(content);//缓存同步,删除缓存中对应的数据。jedisClient.hdel(CONTENT_LIST, content.getCategoryId().toString());return E3Result.ok();}

登录后复制

@Overridepublic List getContentListByCid(long cid) {//查询缓存try {//如果缓存中有直接响应结果String json = jedisClient.hget(CONTENT_LIST, cid + "");if (StringUtils.isNotBlank(json)) {List list = JsonUtils.jsonToList(json,TbContent.class);System.out.println("从缓存中查出的数据");return list;}} catch (Exception e) {e.printStackTrace();}//如果没有查询数据库TbContentExample example = new TbContentExample();Criteria criteria = example.createCriteria();//设置查询条件criteria.andCategoryIdEqualTo(cid);//执行查询List list = contentMapper.selectByExampleWithBLOBs(example);//把结果添加到缓存try {System.out.println("把结果添加到缓存");jedisClient.hset(CONTENT_LIST, cid + "", JsonUtils.objectToJson(list));} catch (Exception e) {e.printStackTrace();}return list;}

登录后复制

**注意要实现缓存同步

再讲一个东西,热缓存,给它设一个过期时间(不同步也是可以的)

  @Overridepublic TbItem getItemById(long itemId) {//获取商品添加缓存,不影业务响逻辑,try-catchtry {System.out.println("缓存获取商品信息");String json = jedisClient.get(REDIS_ITEM_PRE+":"+itemId+":BASE");if(StringUtils.isNotBlank(json)) {TbItem tbItem = JsonUtils.jsonToPojo(json,TbItem.class);return tbItem;}}catch(Exception e) {e.printStackTrace();}//缓存中没有,查询数据库//根据主键查询//TbItem tbItem = itemMapper.selectByPrimaryKey(itemId);TbItemExample example = new TbItemExample();Criteria criteria = example.createCriteria();//设置查询条件criteria.andIdEqualTo(itemId);//执行查询List list = itemMapper.selectByExample(example);if (list != null && list.size() > 0) {//结果添加到缓存try {System.out.println("缓存添加商品信息");jedisClient.set(REDIS_ITEM_PRE+":"+itemId+":BASE",JsonUtils.objectToJson(list.get(0)));//设置过期时间(1个小时)jedisClient.expire(REDIS_ITEM_PRE+":"+itemId+":BASE",TIEM_CACHE_EXPIRE);}catch(Exception e) {e.printStackTrace();}return list.get(0);}return null;}

登录后复制

20180416220314705.png

20180416220349581.png

redis中的数据:

{"itemId":1231490,"created":1425821627000,"updated":1425821627000,"itemDesc":"

登录后复制            温馨提示:小米4联通版内置运营商软件,小米4官方联通版是无内置运营商软件的。                 产品展示    Products Exhibition            @@##@@    

小米手机4

依然出色性能用智能手机阅读、拍照、游戏甚至完成复杂艰巨的任务,这一切都依赖于快。每一代小米手机,都使用了当前先进的元器件。更快的处理器、更快的闪存、更快的相机和图像处理,支持更快的网络。集世界全新科技在一部5英寸大小的设备,只为让科技乐趣人人都可享用,生活正因此变得更加美好

             产品信息    Product Information      Qualcomm® 骁龙? 801四核2.5GHz 处理器高端手机处理器性能之王小米手机 4 采用了高通动力十足的骁龙801手机处理器,内含四个Krait 400 2.5GHz 处理核心。运算速度提升14%,性能更强大。它能出色地同时处理多个复杂任务。它的强大还体现在图像处理器速度较前代提升近一倍,这让拍照与录像都有了更多玩法和可能性。内含一个 Hexagon DSP 核心,专门以超低功耗运行电影、音乐、拍照等任务。这意味着在性能更强大的同时,手机续航都比以往更加持久耐用。@@##@@Adreno 330 图形处理器游戏机品质的3D渲染能力Adreno 330 图形处理器支持高级图形处理API,包括OpenGL ES 3.0、OpenCL、RenderscriptCompute和FlexRender 。它之所以能够快速渲染复杂的图形,得益于统一渲染架构及FlexRender 快速渲染技术。统一渲染架构能够根据所渲染的图形类型,动态调整其资源分配方式,像素和顶点渲染均可进行独立调节。FlexRender 技术可以直接或通过延迟渲染模式在图形像素间动态转换,从而帮助Adreno GPU更快速、更高效地渲染游戏图形。@@##@@高色饱和度屏,84% NTSC色域鲜艳度比 iPhone 5s 高17%小米手机4 采用了高色彩饱和度夏普/JDI屏幕,整体的色彩饱和度提升17%,令色彩表现力更加丰富。无论在小米手机4上面浏览图片、观看视频,或是使用精彩的App,都能为你呈现逼真的颜色效果。@@##@@      @@##@@    

索尼高画质

最快0.3秒极速对焦如何用手机拍下转瞬即逝的美好瞬间?采用索尼 IMX 214 第二代 1300 万像素 Exmor RS? 堆栈式图像传感器,通过减少片上微透镜与感光二极管的距离,使其更容易集合光线。支持硬件更丰富、噪点更少的照片。6片镜头组采用了闭环式对焦技术,对焦最快至0.3秒,这比主流手机都快了两倍之多。它还具备手机上最大的F1.8大光圈,暗光更出色,背景虚化效果更加柔美。为了让拍摄具备更多便利和趣味,还可以使用魔术对焦功能,先拍照,回看时再选择焦点。不必苦练摄影技能,却可以用小米手机4拍出动人有趣的照片

  支持最新4G LTE网络用更快的方式上网、听音乐、看视频移动4G版支持最新中国移动4G(TDD-LTE)网络,下行峰值速率最高可达到132Mbps,上传的速度可达31Mbps。如此之快的传输速度几乎可满足对于无线应用的任何需要。当你外出旅行时,你可以用它随时随地观看在线高清视频,浏览网页或玩最流行的在线游戏,极速的4G网络速度可以带给你酣畅淋漓的使用体验。另可选购联通3G及电信3G版本。@@##@@用手机遥控电视、空调配备红外发射器,支持2853款设备小米手机4 内置红外遥控功能,支持与红外接受设备的传输协议,可以通过专门为这一功能定制的小米遥控器App,遥控家里电视、空调等支持红外协议的家用电器。目前已支持2853款设备,更多设备不断更@@##@@MIUI V5全球24种语言版本,6500万用户好评如潮MIUI 针对原生 Android 深入系统底层优化,更流畅也更加省电。其次是好看,上千款原创主题,上万种搭配,让手机界面千变万化。更重要的是,它让你的生活更加方便。自动识别陌生电话,识别骚扰、诈骗电话。它还可以迅速找到你需要的生活服务,就连预约餐馆和医院挂号也能在系统中完成。@@##@@”}

{"id":1231490,"title":"小米4 白色 联通3G手机","sellPoint":"卖完下柜!不锈钢金属边框,5英寸屏超窄边,骁龙四核2.5GHz处理器,3G RAM,1

登录后复制

更多Redis相关技术文章,请访问Redis教程栏目进行学习!

redis怎么用在项目上redis怎么用在项目上redis怎么用在项目上redis怎么用在项目上redis怎么用在项目上redis怎么用在项目上redis怎么用在项目上redis怎么用在项目上

以上就是redis怎么用在项目上的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2047971.html

(0)
上一篇 2025年2月24日 01:51:32
下一篇 2025年2月18日 02:08:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎么查看redis版本

    linux环境下查看redis的版本有两种方式 redis-server –version 和 redis-server -v  得到的结果是:Redis server v=3.0.7 sha=00000000:0 malloc=jemal…

    2025年2月24日
    200
  • redis主要用来做什么

    1、Redis 是什么? 通常而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等 等,分类的标准也不以,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点…

    2025年2月24日
    200
  • 为什么用redis缓存

    、 首先我们先介绍些redis的基本概念,redis是Nosql数据库,是一个key-value存储系统。虽然redis是key-value的存储系统,但是redis支持的value存储类型是非常的多,比如字符串、链表、集合、有序集合和哈希…

    2025年2月24日
    100
  • redis端口号是什么

    redis默认端口号是6379。 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协…

    2025年2月24日
    200
  • Redis协议是什么样的

    前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端?其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。我们写个简单例子看下redis的协议…

    2025年2月24日
    200
  • redis单线程为什么快

    Redis之所以执行速度很快,主要依赖于以下几个原因: (一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快; (二)单线程操作,避免了不…

    2025年2月24日
    200
  • redis怎么实现集群

    1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令;  主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;  主服务器BGSAVE执行完后,向所有从服务器发送快照文件…

    2025年2月24日
    200
  • 使用redis集群应该注意什么

    Redis集群相对单机在功能上存在一些限制,在使用时做好规避。注意如下: 1)key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的 key执行批量操作。对于映射为不同slot值的key由于执行mget、mget等操作…

    2025年2月24日
    200
  • redis中list怎么存储对象

    如果需要用到Redis存储List对象,而list又不需要进行操作,可以按照MC的方式进行存储,不过Jedis之类的客户端没有提供API,可以有两种思路实现: 1.    分别序列化 elements ,然后 set 存储 2.    序列…

    2025年2月24日
    200
  • redis缓存穿透怎么解决

    缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我们迫切需要解决的问题。本篇文章将我…

    2025年2月24日 数据库
    200

发表回复

登录后才能评论