91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis用在項目上的方法

發布時間:2020-09-21 11:30:13 來源:億速云 閱讀:119 作者:小新 欄目:關系型數據庫

這篇文章給大家分享的是有關redis用在項目上的方法的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

想起自己以前想把Redis整合到JavaWeb項目中,網上搜了很多教程都不全面,現在我終于弄明白了,所以想在這分享一下。

redis用在項目上的方法

1.Redis的安裝

我這里就不講了,網上有很多教程,windows,Linux,我自己的是搭建在服務器上的。

圖形化連接

redis用在項目上的方法

向業務邏輯中添加緩存

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<String> 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;
}
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key, value);
jedis.close();
return result;
}
@Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}
@Override
public Boolean exists(String key) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.exists(key);
jedis.close();
return result;
}
@Override
public Long expire(String key, int seconds) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, seconds);
jedis.close();
return result;
}
@Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}
@Override
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
@Override
public Long hset(String key, String field, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
}
@Override
public String hget(String key, String field) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, field);
jedis.close();
return result;
}
@Override
public Long hdel(String key, String... field) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key, field);
jedis.close();
return result;
}
@Override
public Boolean hexists(String key, String field) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.hexists(key, field);
jedis.close();
return result;
}
@Override
public List<String> hvals(String key) {
Jedis jedis = jedisPool.getResource();
List<String> result = jedis.hvals(key);
jedis.close();
return result;
}
@Override
public 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;
}
@Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
}
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public Boolean exists(String key) {
return jedisCluster.exists(key);
}
@Override
public Long expire(String key, int seconds) {
return jedisCluster.expire(key, seconds);
}
@Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
}
@Override
public Long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public Long hset(String key, String field, String value) {
return jedisCluster.hset(key, field, value);
}
@Override
public String hget(String key, String field) {
return jedisCluster.hget(key, field);
}
@Override
public Long hdel(String key, String... field) {
return jedisCluster.hdel(key, field);
}
@Override
public Boolean hexists(String key, String field) {
return jedisCluster.hexists(key, field);
}
@Override
public List<String> hvals(String key) {
return jedisCluster.hvals(key);
}
@Override
public Long del(String key) {
return jedisCluster.del(key);
}
}

配置:applicationContext-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<!-- 連接redis單機版 -->
<bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool">
<property name="jedisPool" ref="jedisPool"></property>
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="115.159.126.205"/>
<constructor-arg name="port" value="6379"/>
</bean>
<!-- 連接redis集群 -->
<!-- <bean id="jedisClientCluster" class="cn.e3mall.common.jedis.JedisClientCluster">
<property name="jedisCluster" ref="jedisCluster"/>
</bean>
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.25.162"></constructor-arg>
<constructor-arg name="port" value="7001"></constructor-arg>
</bean> 
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.25.162"></constructor-arg>
<constructor-arg name="port" value="7002"></constructor-arg>
</bean> 
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.25.162"></constructor-arg>
<constructor-arg name="port" value="7003"></constructor-arg>
</bean> 
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.25.162"></constructor-arg>
<constructor-arg name="port" value="7004"></constructor-arg>
</bean> 
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.25.162"></constructor-arg>
<constructor-arg name="port" value="7005"></constructor-arg>
</bean> 
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.25.162"></constructor-arg>
<constructor-arg name="port" value="7006"></constructor-arg>
</bean> 
</set>
</constructor-arg>
</bean> -->
</beans>

封裝代碼測試

@Test
public 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:cid
Value:內容列表。需要把java對象轉換成json。
 
使用hash對key進行歸類。
HASH_KEY:HASH
            |--KEY:VALUE
            |--KEY:VALUE
            |--KEY:VALUE
            |--KEY:VALUE

注意:添加緩存不能影響正常業務邏輯。

代碼實現(在服務層實現)

@Autowired
private JedisClient jedisClient;
@Value("${CONTENT_LIST}")
private String CONTENT_LIST;
@Override
public 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();
}
@Override
public List<TbContent> getContentListByCid(long cid) {
//查詢緩存
try {
//如果緩存中有直接響應結果
String json = jedisClient.hget(CONTENT_LIST, cid + "");
if (StringUtils.isNotBlank(json)) {
List<TbContent> 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<TbContent> list = contentMapper.selectByExampleWithBLOBs(example);
//把結果添加到緩存
try {
System.out.println("把結果添加到緩存");
jedisClient.hset(CONTENT_LIST, cid + "", JsonUtils.objectToJson(list));
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

**注意要實現緩存同步

再講一個東西,熱緩存,給它設一個過期時間(不同步也是可以的)

  @Override
public TbItem getItemById(long itemId) {
//獲取商品添加緩存,不影業務響邏輯,try-catch
try {
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<TbItem> 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;
}

redis用在項目上的方法

redis用在項目上的方法

redis中的數據:

{"itemId":1231490,"created":1425821627000,"updated":1425821627000,"itemDesc":"<table cellpadding=\"0\" cellspacing=\"0\" align=\"center\" border=\"0\" width=\"750\">  <tbody>    <tr>      <td height=\"51\" width=\"750\"><div style=\"PADDING-BOTTOM: 15px; LINE-HEIGHT: 1.5em; PADDING-LEFT: 15px; PADDING-RIGHT: 15px; FONT-FAMILY: '微軟雅黑'; FONT-SIZE: 15px; PADDING-TOP: 15px\"><span style=\"color:#ff6666;\"><strong>溫馨提示:</strong></span><strong>小米4聯通版</strong>內置運營商軟件,<strong>小米4官方聯通版</strong>是無內置運營商軟件的。</div></td>    </tr>  </tbody></table><div class=\"content_tpl\">    <div class=\"formwork_bt\" id=\"detail-tag-id-0\" name=\"detail-tag-id-0\" text=\"產品展示\">   <div class=\"formwork_bt_dz\">    <span>產品展示</span>    <span class=\"s2\">Products Exhibition</span>   </div>  </div> <table cellpadding=\"0\" cellspacing=\"6\" align=\"center\" border=\"0\" width=\"750\">  <tbody><tr>    <td><img src=\"http://img30.360buyimg.com/jgsq-productsoa/jfs/t346/347/1422821621/45195/e22eac9b/5439038bNa168d543.jpg\" alt=\"\" /></td>    <td><p class=\"formwork_titleleft\">小米手機4</p><p class=\"formwork_titleleft2\">依然出色性能用智能手機閱讀、拍照、游戲甚至完成復雜艱巨的任務,這一切都依賴于快。每一代小米手機,都使用了當前先進的元器件。更快的處理器、更快的閃存、更快的相機和圖像處理,支持更快的網絡。集世界全新科技在一部5英寸大小的設備,只為讓科技樂趣人人都可享用,生活正因此變得更加美好</p></td>  </tr></tbody></table>    <div class=\"formwork_bt\" id=\"detail-tag-id-2\" name=\"detail-tag-id-2\" text=\"產品信息\">   <div class=\"formwork_bt_dz\">    <span>產品信息</span>    <span class=\"s2\">Product Information</span>   </div>  </div> <div class=\"formwork\"><div class=\"formwork_titlecenter\">Qualcomm&reg; 驍龍? 801四核2.5GHz 處理器</div><div class=\"formwork_text\">高端手機處理器性能之王小米手機 4 采用了高通動力十足的驍龍801手機處理器,內含四個Krait 400 2.5GHz 處理核心。運算速度提升14%,性能更強大。它能出色地同時處理多個復雜任務。它的強大還體現在圖像處理器速度較前代提升近一倍,這讓拍照與錄像都有了更多玩法和可能性。內含一個 Hexagon DSP 核心,專門以超低功耗運行電影、音樂、拍照等任務。這意味著在性能更強大的同時,手機續航都比以往更加持久耐用。</div></div><div class=\"formwork\"><div class=\"formwork_img\"><img src=\"http://img20.360buyimg.com/vc/jfs/t307/358/1403468763/249668/b4048162/54388804Na68f8ead.png\" alt=\"\" /></div></div><div class=\"formwork\"><div class=\"formwork_titlecenter\">Adreno 330 圖形處理器</div><div class=\"formwork_text\">游戲機品質的3D渲染能力Adreno 330 圖形處理器支持高級圖形處理API,包括OpenGL ES 3.0、OpenCL、RenderscriptCompute和FlexRender 。它之所以能夠快速渲染復雜的圖形,得益于統一渲染架構及FlexRender 快速渲染技術。統一渲染架構能夠根據所渲染的圖形類型,動態調整其資源分配方式,像素和頂點渲染均可進行獨立調節。FlexRender 技術可以直接或通過延遲渲染模式在圖形像素間動態轉換,從而幫助Adreno GPU更快速、更高效地渲染游戲圖形。</div></div><div class=\"formwork\"><div class=\"formwork_img\"><img src=\"http://img20.360buyimg.com/vc/jfs/t352/350/1359939860/199186/e31d4b62/5438882fN8a00b5ac.png\" alt=\"\" /></div></div><div class=\"formwork\"><div class=\"formwork_titlecenter\">高色飽和度屏,84% NTSC色域</div><div class=\"formwork_text\">鮮艷度比 iPhone 5s 高17%小米手機4 采用了高色彩飽和度夏普/JDI屏幕,整體的色彩飽和度提升17%,令色彩表現力更加豐富。無論在小米手機4上面瀏覽圖片、觀看視頻,或是使用精彩的App,都能為你呈現逼真的顏色效果。</div></div><div class=\"formwork\"><div class=\"formwork_img\"><img src=\"http://img20.360buyimg.com/vc/jfs/t292/303/1377649814/236958/cf633089/54388856N6b7e3293.png\" alt=\"\" /></div></div><table cellpadding=\"0\" cellspacing=\"6\" align=\"center\" border=\"0\" width=\"750\">  <tbody><tr>    <td><img src=\"http://img20.360buyimg.com/vc/jfs/t337/149/1399837173/112733/5916cfcd/54388886Neddc8729.png\" alt=\"\" /></td>    <td><p class=\"formwork_titleleft\">索尼高畫質</p><p class=\"formwork_titleleft2\">最快0.3秒極速對焦如何用手機拍下轉瞬即逝的美好瞬間?采用索尼 IMX 214 第二代 1300 萬像素 Exmor RS? 堆棧式圖像傳感器,通過減少片上微透鏡與感光二極管的距離,使其更容易集合光線。支持硬件更豐富、噪點更少的照片。6片鏡頭組采用了閉環式對焦技術,對焦最快至0.3秒,這比主流手機都快了兩倍之多。它還具備手機上最大的F1.8大光圈,暗光更出色,背景虛化效果更加柔美。為了讓拍攝具備更多便利和趣味,還可以使用魔術對焦功能,先拍照,回看時再選擇焦點。不必苦練攝影技能,卻可以用小米手機4拍出動人有趣的照片</p></td>  </tr></tbody></table><div class=\"formwork\"><div class=\"formwork_titlecenter\">支持最新4G LTE網絡</div><div class=\"formwork_text\">用更快的方式上網、聽音樂、看視頻移動4G版支持最新中國移動4G(TDD-LTE)網絡,下行峰值速率最高可達到132Mbps,上傳的速度可達31Mbps。如此之快的傳輸速度幾乎可滿足對于無線應用的任何需要。當你外出旅行時,你可以用它隨時隨地觀看在線高清視頻,瀏覽網頁或玩最流行的在線游戲,極速的4G網絡速度可以帶給你酣暢淋漓的使用體驗。另可選購聯通3G及電信3G版本。</div></div><div class=\"formwork\"><div class=\"formwork_img\"><img src=\"http://img20.360buyimg.com/vc/jfs/t322/260/1373090020/189626/610b2da/543888a1Ncd81c157.png\" alt=\"\" /></div></div><div class=\"formwork\"><div class=\"formwork_titlecenter\">用手機遙控電視、空調</div><div class=\"formwork_text\">配備紅外發射器,支持2853款設備小米手機4 內置紅外遙控功能,支持與紅外接受設備的傳輸協議,可以通過專門為這一功能定制的小米遙控器App,遙控家里電視、空調等支持紅外協議的家用電器。目前已支持2853款設備,更多設備不斷更</div></div><div class=\"formwork\"><div class=\"formwork_img\"><img src=\"http://img20.360buyimg.com/vc/jfs/t343/265/1372124071/66786/5ee90d6e/543888d1N3d0c4330.png\" alt=\"\" /></div></div><div class=\"formwork\"><div class=\"formwork_titlecenter\">MIUI V5</div><div class=\"formwork_text\">全球24種語言版本,6500萬用戶好評如潮MIUI 針對原生 Android 深入系統底層優化,更流暢也更加省電。其次是好看,上千款原創主題,上萬種搭配,讓手機界面千變萬化。更重要的是,它讓你的生活更加方便。自動識別陌生電話,識別騷擾、詐騙電話。它還可以迅速找到你需要的生活服務,就連預約餐館和醫院掛號也能在系統中完成。</div></div><div class=\"formwork\"><div class=\"formwork_img\"><img src=\"http://img20.360buyimg.com/vc/jfs/t298/277/1374037756/194959/d1e9ee70/543888f1Na55c4785.png\" alt=\"\" /></div></div></div>"}
{"id":1231490,"title":"小米4 白色 聯通3G手機","sellPoint":"賣完下柜!不銹鋼金屬邊框,5英寸屏超窄邊,驍龍四核2.5GHz處理器,3G RAM,1

感謝各位的閱讀!關于redis用在項目上的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇坪县| 长丰县| 罗定市| 吉安市| 汉阴县| 曲靖市| 德昌县| 西安市| 毕节市| 府谷县| 巴南区| 常德市| 行唐县| 淮安市| 枞阳县| 安庆市| 乌鲁木齐市| 金寨县| 正安县| 上饶县| 勐海县| 镇江市| 锦屏县| 乐东| 芮城县| 南漳县| 蓝田县| 长武县| 灵武市| 泽普县| 祁连县| 丰台区| 托里县| 吴旗县| 新宁县| 莆田市| 乡宁县| 竹北市| 宜君县| 新泰市| 乌苏市|