日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第七天(非原创)

發(fā)布時(shí)間:2024/4/15 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第七天(非原创) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章大綱

一、課程介紹
二、Redis基礎(chǔ)實(shí)戰(zhàn)
三、Redis之高可用、集群、云平臺(tái)搭建實(shí)戰(zhàn)
四、淘淘商城Jedis整合spring
五、項(xiàng)目源碼與資料下載
六、參考文章

一、課程介紹

一共14天課程
(1)第一天:電商行業(yè)的背景。淘淘商城的介紹。搭建項(xiàng)目工程。Svn的使用。
(2)第二天:框架的整合。后臺(tái)管理商品列表的實(shí)現(xiàn)。分頁(yè)插件。
(3)第三天:后臺(tái)管理。商品添加。商品類(lèi)目的選擇、圖片上傳、富文本編輯器的使用。
(4)第四天:商品規(guī)格的實(shí)現(xiàn)。
(5)第五天:商城前臺(tái)系統(tǒng)的搭建。首頁(yè)商品分類(lèi)的展示。Jsonp。
(6)第六天:cms系統(tǒng)的實(shí)現(xiàn)。前臺(tái)大廣告位的展示。
(7)第七天:cms系統(tǒng)添加緩存。Redis。緩存同步。
(8)第八天:搜索功能的實(shí)現(xiàn)。使用solr實(shí)現(xiàn)搜索。
(9)第九天:商品詳情頁(yè)面的展示。
(10)第十天:單點(diǎn)登錄系統(tǒng)。Session共享。
(11)第十一天:購(gòu)物車(chē)訂單系統(tǒng)的實(shí)現(xiàn)。
(12)第十二天:nginx。反向代理工具。
(13)第十三天:redis集群的搭建、solr集群的搭建。系統(tǒng)的部署。
(14)項(xiàng)目總結(jié)。

二、Redis基礎(chǔ)實(shí)戰(zhàn)

Redis的基礎(chǔ)包括以下內(nèi)容,可參考文章https://www.cnblogs.com/WUXIAOCHANG/p/10832330.html進(jìn)行學(xué)習(xí)
(1)安裝并設(shè)置開(kāi)機(jī)自動(dòng)啟動(dòng)
(2)Redis文件結(jié)構(gòu)
(3)Redis啟動(dòng)方式
(4)Redis持久化
(5)Redis配置文件詳解
(7)Redis圖形化工具
(8)Java之Jedis連接Redis單機(jī)

三、Redis之高可用、集群、云平臺(tái)搭建實(shí)戰(zhàn)

https://www.cnblogs.com/WUXIAOCHANG/p/10851334.html

四、淘淘商城Jedis整合spring

1. 添加Reids之后項(xiàng)目架構(gòu)

2. Redis在淘淘商城解決方案

在taotao-rest工程中發(fā)布一個(gè)服務(wù)。當(dāng)后臺(tái)管理系統(tǒng)修改內(nèi)容后,調(diào)用此服務(wù),同步緩存。

3. Jedis整合spring

3.1 resources文件夾中添加配置文件
在resources文件夾中創(chuàng)建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.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 連接池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大連接數(shù) --> <property name="maxTotal" value="30" /> <!-- 最大空閑連接數(shù) --> <property name="maxIdle" value="10" /> <!-- 每次釋放連接的最大數(shù)目 --> <property name="numTestsPerEvictionRun" value="1024" /> <!-- 釋放連接的掃描間隔(毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <!-- 連接最小空閑時(shí)間 --> <property name="minEvictableIdleTimeMillis" value="1800000" /> <!-- 連接空閑多久后釋放, 當(dāng)空閑時(shí)間>該值 且 空閑連接>最大空閑連接數(shù) 時(shí)直接釋放 --> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <!-- 獲取連接時(shí)的最大等待毫秒數(shù),小于零:阻塞不確定的時(shí)間,默認(rèn)-1 --> <property name="maxWaitMillis" value="1500" /> <!-- 在獲取連接的時(shí)候檢查有效性, 默認(rèn)false --> <property name="testOnBorrow" value="true" /> <!-- 在空閑時(shí)檢查有效性, 默認(rèn)false --> <property name="testWhileIdle" value="true" /> <!-- 連接耗盡時(shí)是否阻塞, false報(bào)異常,ture阻塞直到超時(shí), 默認(rèn)true --> <property name="blockWhenExhausted" value="false" /> </bean> <!-- 單機(jī)版的redis環(huán)境配置 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="192.168.3.153"/> <constructor-arg name="port" value="6379"/> <constructor-arg name="poolConfig" ref="jedisPoolConfig"/> </bean> <!-- 集群redis環(huán)境的配置,任選其一 --> <!-- bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg name="nodes"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7001"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7002"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7003"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7004"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7005"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7006"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7007"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.25.153"></constructor-arg> <constructor-arg index="1" value="7008"></constructor-arg> </bean> </set> </constructor-arg> <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg> </bean> --> <!-- redis客戶(hù)端實(shí)現(xiàn)類(lèi) --> <!-- 單機(jī)版 --> <bean id="jedisClient" class="com.taotao.rest.dao.impl.JedisClientPool"/> <!-- 集群版 --> <!--<bean id="jedisClient" class="com.taotao.rest.dao.impl.JedisClientCluster"/> --> </beans>

溫馨提示:
(1)jedisPoolConfig是連接池的配置信息,無(wú)論是單機(jī)還是集群都適用
(2)jedisClient為單機(jī)版的配置信息
(3)jedisCluster是集群版的配置信息

3.2 單機(jī)版整合測(cè)試
com.taotao.rest.dao包中創(chuàng)建連接池JedisClientPool.java

/*** redis單機(jī)版客戶(hù)端*/ public class JedisClientPool implements JedisClient{ @Autowired private JedisPool jedisPool; @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.get(key); jedis.close(); return result; } @Override public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String string = jedis.set(key, value); jedis.close(); return string; } @Override public long incr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } @Override public Long hset(String hkey, String key, String value) { Jedis jedis = jedisPool.getResource(); Long hset = jedis.hset(hkey, key, value); jedis.close(); return hset; } @Override public String hget(String hkey, String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(hkey, key); jedis.close(); return result; } @Override public Long del(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.del(key); jedis.close(); return result; } @Override public Long hdel(String hkey, String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hdel(hkey, key); jedis.close(); return result; } @Override public Long expire(String key, int second) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, second); return result; } }

com.taotao.rest.dao包中創(chuàng)建測(cè)試類(lèi)JedisTest.java

public class JedisTest { // 單機(jī)版測(cè)試Jedis,不使用連接池 public void testJedis() { // 創(chuàng)建Jedis對(duì)象 Jedis jedis = new Jedis("127.0.0.1", 6379); // 設(shè)置對(duì)象 jedis.set("key1", "jedis test"); String string = jedis.get("key1"); System.out.println(string); // 關(guān)閉jedis jedis.close(); } // 單機(jī)版測(cè)試Jedis,這是使用連接池的方式來(lái)獲取redis的資源 public void testJedispool() { JedisPool pool = new JedisPool("127.0.0.1", 6379); Jedis resource = pool.getResource(); String string = resource.get("key1"); System.out.println(string); // 不要忘記關(guān)閉連接池了 pool.close(); resource.close(); }

創(chuàng)建后項(xiàng)目結(jié)構(gòu)如下

3.3 集群版整合測(cè)試
com.taotao.rest.dao包中創(chuàng)建集群版客戶(hù)端JedisClientCluster.java

/*** redis集群版客戶(hù)端*/ public class JedisClientCluster implements JedisClient { @Autowired private JedisCluster jedisCluster; @Override public String get(String key) { String string = jedisCluster.get(key); return string; } @Override public String set(String key, String value) { String string = jedisCluster.set(key, value); return string; } @Override public long incr(String key) { Long result = jedisCluster.incr(key); return result; } @Override public Long hset(String hkey, String key, String value) { Long result = jedisCluster.hset(hkey, key, value); return result; } @Override public String hget(String hkey, String key) { String string = jedisCluster.hget(hkey, key); return string; } @Override public Long del(String key) { Long result = jedisCluster.del(key); return result; } @Override public Long hdel(String hkey, String key) { Long result = jedisCluster.hdel(hkey, key); return result; } @Override public Long expire(String key, int second) { Long result = jedisCluster.expire(key, second); return result; } }

com.taotao.rest.dao包中使用測(cè)試類(lèi)JedisTest.java

// 集群版,測(cè)試redis集群環(huán)境public void testJiQun(){ HashSet<HostAndPort> nodes=new HashSet<HostAndPort>(); //這里的ip和后面的端口是,在linux系統(tǒng)的ip和配置的不同的redis的端口 nodes.add(new HostAndPort("127.0.0.1",6379)); nodes.add(new HostAndPort("127.0.0.1",6380)); nodes.add(new HostAndPort("127.0.0.1",6381)); nodes.add(new HostAndPort("127.0.0.1",6382)); nodes.add(new HostAndPort("127.0.0.1",6383)); nodes.add(new HostAndPort("127.0.0.1",6384)); JedisCluster cluster=new JedisCluster(nodes); String string=cluster.get("key4"); System.out.println(string); cluster.close(); }

4. 把緩存添加到業(yè)務(wù)邏輯

4.1 resources文件夾中添加配置
resources文件夾中新增resource.properties配置文件

#redis中內(nèi)容緩存的key REDIS_CONTENT_KEY=REDIS_CONTENT #redis中商品信息緩存的key REDIS_TAOTAO_ITEM_KEY=TAOTAO_ITEM #過(guò)期時(shí)間60*60*24 REDIS_TAOTAO_ITME_EXPIRE=86400

4.2 創(chuàng)建緩存使用業(yè)務(wù)邏輯類(lèi)
com.taotao.rest.service包下創(chuàng)建ContentServiceImpl.java進(jìn)行緩存使用

package com.taotao.rest.service.impl;import java.util.List;import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.taotao.common.pojo.TaotaoResult; import com.taotao.common.utils.ExceptionUtil; import com.taotao.common.utils.JsonUtils; import com.taotao.mapper.TbContentMapper; import com.taotao.pojo.TbContent; import com.taotao.pojo.TbContentExample; import com.taotao.pojo.TbContentExample.Criteria; import com.taotao.rest.dao.JedisClient; import com.taotao.rest.service.ContentService; /** * 內(nèi)容管理服務(wù) */ @Service public class ContentServiceImpl implements ContentService { @Autowired private TbContentMapper contentMapper; @Autowired private JedisClient jedisClient; @Value("${REDIS_CONTENT_KEY}") private String REDIS_CONTENT_KEY; @Override public TaotaoResult getContentList(long categoryId) { //添加取緩存的邏輯 //緩存不能影響正常邏輯 try { String result = jedisClient.hget(REDIS_CONTENT_KEY, categoryId+""); //判斷結(jié)果是否為空 if (!StringUtils.isBlank(result)) { List<TbContent> list = JsonUtils.jsonToList(result, TbContent.class); return TaotaoResult.ok(list); } } catch (Exception e) { e.printStackTrace(); } //緩存邏輯結(jié)束 List<TbContent> list = null; try { TbContentExample example = new TbContentExample(); Criteria criteria = example.createCriteria(); // 設(shè)置查詢(xún)條件 criteria.andCategoryIdEqualTo(categoryId); // 執(zhí)行查詢(xún) list = contentMapper.selectByExample(example); } catch (Exception e) { e.printStackTrace(); return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e)); } //把內(nèi)容添加到緩存中 try { jedisClient.hset(REDIS_CONTENT_KEY, categoryId + "", JsonUtils.objectToJson(list)); } catch (Exception e) { // TODO: handle exception } //end return TaotaoResult.ok(list); } }

5. 同步緩存服務(wù)

??當(dāng)數(shù)據(jù)庫(kù)中的內(nèi)容信息發(fā)生改變后,例如首頁(yè)大廣告為的廣告內(nèi)容發(fā)生變化后,如何實(shí)現(xiàn)redis中的數(shù)據(jù)同步更新呢?可以在taotao-rest工程中發(fā)布一個(gè)服務(wù),就是專(zhuān)門(mén)同步數(shù)據(jù)用的,其實(shí)只需要把緩存中的數(shù)據(jù)清空即可。當(dāng)管理后臺(tái)更新了內(nèi)容信息后,需要調(diào)用此服務(wù)。
??此服務(wù)不需要mapper內(nèi)容。只需要JedisCluster對(duì)象。

5.1 創(chuàng)建緩存同步服務(wù)邏輯類(lèi)
com.taotao.rest.service包中創(chuàng)建RedisSyncServiceImpl.java

@Service public class RedisSyncServiceImpl implements RedisSyncService { @Autowired private JedisClient jedisClient; @Value("${REDIS_CONTENT_KEY}") private String REDIS_CONTENT_KEY; @Override public TaotaoResult syncContent(String key) { jedisClient.hdel(REDIS_CONTENT_KEY, key); return TaotaoResult.ok(); } }

在com.taotao.rest.controller包中創(chuàng)建緩存同步的服務(wù)類(lèi)RedisSyncController.java

@Controller @RequestMapping("/sync") public class RedisSyncController { @Autowired private RedisSyncService redisSyncService; @RequestMapping("/content/{categoryId}") @ResponseBody public TaotaoResult syncContent(@PathVariable String categoryId) { try { redisSyncService.syncContent(categoryId); } catch (Exception e) { e.printStackTrace(); return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e)); } return TaotaoResult.ok(); } }

五、項(xiàng)目源碼與資料下載

鏈接:https://pan.baidu.com/s/1XsTBNB8RCT-c2SaFdOTyqA
提取碼:t05n

六、參考文章

http://yun.itheima.com/course?hm

轉(zhuǎn)載于:https://www.cnblogs.com/WUXIAOCHANG/p/10851733.html

總結(jié)

以上是生活随笔為你收集整理的ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第七天(非原创)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 大奶子av| 日韩欧美综合 | 亚洲欧美bt | 国产一区二区三区影院 | 五月天激情国产综合婷婷婷 | 成人在线视频免费播放 | 男女被到爽流尿 | 欧美日韩国产中文字幕 | 亚洲精品视频免费 | 黄色wwwww| 日本啪啪动态图 | 九色porny丨精品自拍视频 | 麻豆福利在线观看 | 白丝动漫美女 | 成人在线免费视频 | 奇米狠狠777 | 人人妻人人澡人人爽欧美一区双 | 国产一级一级片 | 欧美极品一区二区 | 亚洲日本黄色 | 久久午夜影视 | 求个黄色网址 | 俺也去av| 丰满人妻一区二区三区46 | 国产精品久久AV无码 | 午夜视频观看 | 51成人精品网站 | www.久久国产 | 亚洲一区二区三区四区五区午夜 | 亚洲精品国产suv一区 | 日韩五码 | www.狠狠操.com | 大吊一区二区三区 | av大全网站 | 男人天堂网在线视频 | 潘金莲性xxxxhd | 亚洲二区在线视频 | 91欧美日韩麻豆精品 | 美女又大又黄 | 永久免费看成人av的动态图 | 三男一女吃奶添下面 | 一区二区三区高清 | 玖玖热视频 | 成人免费看片视频 | 超薄肉色丝袜一区二区 | 天天综合网天天综合色 | 中文字幕国产在线观看 | 亚洲狠狠| 动漫美女舌吻 | 中文字幕人妻精品一区 | 91日韩在线 | 97公开视频| av老司机在线观看 | 色xxxxxx| 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 精品无码久久久久 | 一区二区在线观看免费视频 | 国产精品国产三级国产专播品爱网 | av大西瓜| 国产一区自拍视频 | 影音先锋日韩资源 | 成人视屏在线观看 | 大尺度做爰无遮挡露器官 | 韩国毛片一区二区 | 成人精品视频99在线观看免费 | 露出调教羞耻91九色 | 国产亚洲综合在线 | 国产福利久久 | 成人久久久精品乱码一区二区三区 | 性久久久久久久 | 亚洲精品美女视频 | 久久成人精品视频 | 国语对白久久 | 日韩精品福利 | 精品一区二区在线免费观看 | 探花av在线 | 18pao国产成视频永久免费 | 国产依人 | 三级小视频在线观看 | 你懂的在线视频网站 | 97久久久| 女同亚洲精品一区二区三 | 九九国产精品视频 | 一区二区三区免费 | 日韩色图在线观看 | 粗大黑人巨茎大战欧美成人 | 亚洲大尺度视频 | 欧美精品免费看 | 国产三级自拍视频 | av在观看| 欧美激情久久久久 | 日韩久久久久久久久久 | 国产精品二 | 日本一道本在线 | 欧美老女人性生活视频 | 毛片视频大全 | 国产在线精品二区 | 色播一区二区 | 奇米色777|