淘淘商城第七天筆記_第1頁
淘淘商城第七天筆記_第2頁
淘淘商城第七天筆記_第3頁
淘淘商城第七天筆記_第4頁
淘淘商城第七天筆記_第5頁
已閱讀5頁,還剩29頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、傳智播客 Java學院 傳智.入云龍淘淘商城第七天第六天內容復習輪播圖的展示內容管理的后臺。Cms系統內容分類的管理內容管理,需要指定內容的分類前臺展示內容需要服務層發布服務。Portal調用服務獲得數據。HttpClient調用服務獲得數據。獲得數據后,把數據轉換成需要的數據格式傳遞給jsp。課程計劃在業務邏輯中添加緩存緩存可以使用redis作為緩存。Redis集群在java代碼中使用redis單機版、集群版。在業務邏輯中添加緩存。搜索系統的實現創建一個搜索的工程使用solr實現搜索。Solr集群搭建緩存的添加Redis 的單機版安裝步驟:第一步:安裝gcc編譯環境yum install g

2、cc-c+第二步:把redis的源碼上傳到linux服務器。第三步:解壓縮。tar -zxvf redis-3.0.0.tar.gz第四步:make第五步:make install PREFIX=/usr/local/redis啟動redis兩種啟動方式,前端啟動、后臺啟動。前端啟動:./redis-server后臺啟動:復制redis.conf到redis的安裝目錄修改redis.conf。修改daemonize yesrootbogon redis# ./redis-server redis.conf客戶端redis-cli -p 端口 -h ip地址 連接集群時使用此參數默認端口:637

3、9Ip:localhost()RedisDesktopManager:只能在單機版環境使用。不支持redis集群。Redis集群redis-cluster架構圖架構細節:(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.(2)節點的fail是通過集群中超過半數的節點檢測失效時才生效.(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可(4)redis-cluster把所有的物理節點映射到0-16383slot上,cluster 負責維護nodeslotvalueRedis 集群中

4、內置了 16384 個哈希槽,當需要在 Redis 集群中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然后把結果對 16384 求余數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點集群搭建集群中應該至少有三個節點,每個節點有一備份節點。需要6臺服務器。搭建偽分布式,需要6個redis實例。搭建集群的步驟:第一步:創建6個redis實例指定端口從7001到7006第二步:修改redis.conf 打開Cluster-enable yes前面的注釋。第三步:需要一

5、個ruby腳本。在redis源碼文件夾下的src目錄下。redis-trib.rb第四步:把redis-trib.rb文件復制到到redis-cluster目錄下。第五步:執行ruby腳本之前,需要安裝ruby環境。1、yum install ruby2、yum install rubygems3、安裝redis-trib.rb運行依賴的ruby的包。rootbogon # gem install redis-3.0.0.gem第六步:啟動所有的redis實例。第七步:使用redis-trib.rb創建集群。./redis-trib.rb create -replicas 1 53:7001

6、53:7002 53:7003 53:7004 53:7005 53:7006使用客戶端連接集群: redis01/redis-cli -p 7001 -c如何使用redis的java客戶端需要使用Jedis連接redis服務器。連接單機版先把jedis依賴的jar包添加到工程中。/單機版測試Testpublic void testJedisSingle() throws Exception /創建一個Jedis對象Jedis jedis = new Jedis(53, 6379);jedis.set(test, hello jedis);String string = jedis.get(t

7、est);System.out.println(string);jedis.close();使用連接池:/使用連接池Testpublic void testJedisPool() throws Exception /創建一個連接池對象/系統中應該是單例的。JedisPool jedisPool = new JedisPool(53, 6379);/從連接池中獲得一個連接Jedis jedis = jedisPool.getResource();String result = jedis.get(test);System.out.println(result);/jedis必須關閉jedis.c

8、lose();/系統關閉時關閉連接池jedisPool.close();集群版使用Jedis/連接redis集群Testpublic void testJedisCluster() throws Exception /創建一個JedisCluster對象Set nodes = new HashSet();nodes.add(new HostAndPort(53, 7001);nodes.add(new HostAndPort(53, 7002);nodes.add(new HostAndPort(53, 7003);nodes.add(new HostAndPort(53, 7004);nod

9、es.add(new HostAndPort(53, 7005);nodes.add(new HostAndPort(53, 7006);/在nodes中指定每個節點的地址/jedisCluster在系統中是單例的。JedisCluster jedisCluster = new JedisCluster(nodes);jedisCluster.set(name, zhangsan);jedisCluster.set(value, 100);String name = jedisCluster.get(name);String value = jedisCluster.get(value);Sy

10、stem.out.println(name);System.out.println(value);/系統關閉時關閉jedisClusterjedisCluster.close();項目中使用jedis思路:創建一個redis操作的接口。分別創建兩個實現類對應redis 的單機版和集群版。當使用單機版redis時,配置單機版的實現類,當使用集群版本的時候,配置集群版的實現類。單機版實現類/* * redis客戶端單機版實現類 * Title: JedisClientSingle * Description: * Company: * author入云龍 * date2015年11月20日上午10

11、:13:58 * version 1.0 */public class JedisClientSingle implements JedisClientAutowiredprivate 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(Strin

12、g key) Jedis jedis = jedisPool.getResource();String result = jedis.get(key);jedis.close();return result;Overridepublic Long hset(String key, String item, String value) Jedis jedis = jedisPool.getResource();Long result = jedis.hset(key, item, value);jedis.close();return result;Overridepublic String h

13、get(String key, String item) Jedis jedis = jedisPool.getResource();String result = jedis.hget(key, item);jedis.close();return result;Overridepublic Long incr(String key) Jedis jedis = jedisPool.getResource();Long result = jedis.incr(key);jedis.close();return result;Overridepublic Long decr(String ke

14、y) Jedis jedis = jedisPool.getResource();Long result = jedis.decr(key);jedis.close();return result;Overridepublic Long expire(String key, int second) Jedis jedis = jedisPool.getResource();Long result = jedis.expire(key, second);jedis.close();return result;Overridepublic Long ttl(String key) Jedis je

15、dis = jedisPool.getResource();Long result = jedis.ttl(key);jedis.close();return result;集群版/* * redis客戶端集群版實現類 * Title: JedisClientCluster * Description: * Company: * author入云龍 * date2015年11月20日上午10:14:57 * version 1.0 */public class JedisClientCluster implements JedisClient Autowiredprivate JedisClu

16、ster jedisCluster;Overridepublic String set(String key, String value) return jedisCluster.set(key, value);Overridepublic String get(String key) return jedisCluster.get(key);Overridepublic Long hset(String key, String item, String value) return jedisCluster.hset(key, item, value);Overridepublic Strin

17、g hget(String key, String item) return jedisCluster.hget(key, item);Overridepublic Long incr(String key) return jedisCluster.incr(key);Overridepublic Long decr(String key) return jedisCluster.decr(key);Overridepublic Long expire(String key, int second) return jedisCluster.expire(key, second);Overrid

18、epublic Long ttl(String key) return jedisCluster.ttl(key);Spring的配置!- -測試:Testpublic void testJedisClientSpring() throws Exception /創建一個spring容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext(classpath:spring/applicationContext-*.xml);/從容器中獲得JedisClient對象JedisClient jedisC

19、lient = applicationContext.getBean(JedisClient.class);/jedisClient操作redisjedisClient.set(cliet1, 1000);String string = jedisClient.get(cliet1);System.out.println(string);業務邏輯中添加緩存注意:添加緩存時不要影響正常的業務邏輯。Overridepublic List getContentList(Long cid) /添加緩存/查詢數據庫之前先查詢緩存,如果有直接返回try /從redis中取緩存數據String json =

20、 jedisClient.hget(REDIS_CONTENT_KEY, cid+);if (!StringUtils.isBlank(json) /把json轉換成ListList list = JsonUtils.jsonToList(json, TbContent.class);return list; catch (Exception e) e.printStackTrace();/ 根據cid查詢內容列表TbContentExample example = new TbContentExample();Criteria criteria = example.createCriteri

21、a();criteria.andCategoryIdEqualTo(cid);/執行查詢List list = contentMapper.selectByExampleWithBLOBs(example);/返回結果之前,向緩存中添加數據try /為了規范key可以使用hash/定義一個保存內容的key,hash中每個項就是cid/value是list,需要把list轉換成json數據。jedisClient.hset(REDIS_CONTENT_KEY, cid+, JsonUtils.objectToJson(list); catch (Exception e) e.printStack

22、Trace();return list;緩存同步當后臺修改內容信息后,只需要把redis中緩存的數據刪除即可。后臺系統不直接操作redis數據庫。可以在taotao-rest中發布一個服務,當后臺對內容信息修改后,調用服務即可。服務的功能就是根據cid刪除redis中緩存數據。發布服務Dao層使用JedisClient。Service層接收cid,根據cid調用JedisClient刪除redis中緩存的數據。返回結果TaotaoResult。Overridepublic TaotaoResult syncContent(Long cid) jedisClient.hdel(REDIS_CON

23、TENT_KEY, cid + );return TaotaoResult.ok();Controller層發布服務,接收參數cid,返回結果TaotaoResult。RequestMapping(/sync/content/cid)ResponseBodypublic TaotaoResult sysncContent(PathVariable Long cid) try TaotaoResult result = contentService.syncContent(cid);return result; catch (Exception e) e.printStackTrace();re

24、turn TaotaoResult.build(500, ExceptionUtil.getStackTrace(e);調用緩存同步后臺系統中,只要內容發生變化(增刪改操作)需要調用緩存同步的服務。商品類目展示添加緩存作業搜索系統搭建搜索功能需要發布服務共pc端、移動端使用。根據關鍵詞搜索,得到json格式的搜索結果。創建一個搜索系統,發布搜索服務。系統架構:創建一個搜索工程:taotao-search搭建solr服務創建搜索系統可以參考taotao-rest創建。使用的技術:MybatisSpringSpringmvc(發布服務)SolrJ(solr服務的客戶端)Pom文件4.0.0com.

25、taotaotaotao-parent0.0.1-SNAPSHOTcom.taotaotaotao-search0.0.1-SNAPSHOTwarcom.taotaotaotao-manager-dao0.0.1-SNAPSHOTorg.springframeworkspring-contextorg.springframeworkspring-beansorg.springframeworkspring-webmvcorg.springframeworkspring-jdbcorg.springframeworkspring-aspectsorg.springframeworkspring-

26、context-supportjavax.servletservlet-apiprovidedjavax.servletjsp-apiprovidedorg.apache.solrsolr-solrjorg.apache.tomcat.maventomcat7-maven-plugin8083/框架整合Ssm整合。Solr服務的搭建需要在linux系統下搭建solr服務。需要安裝tomcat安裝jdkCentOS單機版安裝:第一步:安裝jdk、安裝tomcat第二步:解壓solr壓縮包。第三步:把dist/solr-4.10.3.war部署到tomcat下。第四步:解壓縮war包。啟動tomc

27、at解壓。第五步:需要把/root/solr-4.10.3/example/lib/ext目錄下的所有的jar包添加到solr工程中。第六步:創建solrhome。把/root/solr-4.10.3/example/solr文件夾復制一份作為solrhome。第七步:告訴solr服務solrhome的位置。需要修改web.xml第八步:啟動tomcat。配置中文分析器、自定義業務域分析器使用IKAnalyzer。使用方法:第一步:把IKAnalyzer依賴的jar包添加到solr工程中。把分析器使用的擴展詞典添加到classpath中。第二步:需要自定義一個FieldType。Schema.

28、xml中定義。可以在FieldType中指定中文分析器。 第三步:自定義域。指定域的類型為自定義的FieldType。Sql語句:SELECTa.id,a.title,a.sell_point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1第四步:重新啟動tomcat索引庫中導入數據Solrj的使用public class

29、 SolrJTest Testpublic void testSolrJ() throws Exception /創建連接SolrServer solrServer = new HttpSolrServer(54:8080/solr);/創建一個文檔對象SolrInputDocument document = new SolrInputDocument();/添加域document.addField(id, solrtest01);document.addField(item_title, 測試商品);document.addField(item_sell_point, 賣點);/添加到索引庫

30、solrServer.add(document);/提交solrSmit();Testpublic void testQuery() throws Exception /創建連接SolrServer solrServer = new HttpSolrServer(54:8080/solr);/創建一個查詢對象SolrQuery query = new SolrQuery();query.setQuery(*:*);/執行查詢QueryResponse response = solrServer.query(query);/取查詢結果SolrDocumentList solrDocumentLi

31、st = response.getResults();for (SolrDocument solrDocument : solrDocumentList) System.out.println(solrDocument.get(id);System.out.println(solrDocument.get(item_title);System.out.println(solrDocument.get(item_sell_point);導入數據分析從數據庫中根據sql語句查詢數據,遍歷數據創建文檔對象,把文檔對象寫入索引庫。Dao層Sql語句:SELECTa.id,a.title,a.sell_

32、point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1需要創建一個mapper文件。接口:public interface ItemMapper List getItemList();Mapper文件:SELECTa.id,a.title,a.sell_point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1Service層取商品列表,遍歷列表,創建文檔對象,把文檔對象寫入索引庫。要操作索引庫需要SolrServer對象,可以把SolrServer放到spring容器中,注入到Service。Servicepublic class ItemS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論