关于淘淘商城的一些基本说明
關(guān)于淘淘商城的一些基本說明
1. maven
Maven的常見打包方式:jar、war、pom
Pom工程一般都是父工程,管理jar包的版本、maven插件的版本、統(tǒng)一的依賴管理。聚合工程。
jar包就是java的類進(jìn)行編譯生成的class文件打包成的壓縮包。里面就是一些class文件。當(dāng)我們自己使用maven寫一些java程序,進(jìn)行打包生成jar包。同時在可以在其他的工程下使用,但是我們在這個工程依賴的jar包,在其他工程使用該jar包也要導(dǎo)入。JAR 文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。
war包其實就是一個web程序進(jìn)行打包便于部署的壓縮包,里面包含我們web程序需要的一些東西,其中包括一些class文件,web.xml的配置文件,前端的頁面文件,以及依賴的jar!把war包放在tomcat目錄的webapp下,tomcat服務(wù)器在啟動的時候自動解壓war包編譯里面的代碼,所以當(dāng)文件很多的時候,tomcat的啟動會很慢。一個war包可以理解為一個web項目,里面是項目的所有東西。
其中運行一個maven工程(web工程)需要一個命令:tomat:run
例如:
Taotao-parent:父工程,打包方式pom,管理jar包的版本號,項目中所有工程都應(yīng)該繼承父工程。|--Taotao-common:通用的工具類通用的pojo。打包方式j(luò)ar|--Taotao-manager:服務(wù)層工程。聚合工程。Pom工程 |--taotao-manager-dao:打包方式j(luò)ar|--taotao-manager-pojo:打包方式j(luò)ar|--taotao-manager-interface:打包方式j(luò)ar|--taotao-manager-service:打包方式:war|--taotao-manager-web:表現(xiàn)層工程。打包方式war步驟
apache官網(wǎng)maven下載
在ecplise下配置maven
點擊”Add”,進(jìn)入下面的頁面
然后在eclipse中配置倉庫的位置
maven倉庫地址、私服等配置信息需在setting.xml文件中配置,分為全局配置和用戶配置,在maven安裝目錄下的有 conf/setting.xml文件,此setting.xml文件用于maven的所有project項目,它作為maven的全局配置。如需要個性配置則需要在用戶配置中設(shè)置,用戶配置的setting.xml文件默認(rèn)的位置在: u s e r . d i r / . m 2 / s e t t i n g s . x m l 目 錄 中 , {user.dir} /.m2/settings.xml目錄中, user.dir/.m2/settings.xml目錄中,{user.dir} 指windows 中的用戶目錄。maven會先找用戶配置,如果找到則以用戶配置文件為準(zhǔn),否則使用全局配置文件。
maven的一些標(biāo)簽解釋
懶得寫了,可以在官方文檔上查 maven官方文檔
有位博主根據(jù)官方文檔總結(jié)的也不錯,可以去看看
https://blog.csdn.net/xupeng874395012/article/details/72921857
2.逆向工程
使用mybatis官方提供的mybatis-generator生成pojo、mapper接口及映射文件。
并且將pojo放到toatao-manager-pojo工程中。
將mapper接口及映射文件放到taotao-manager-dao工程中。
https://blog.csdn.net/qq_39056805/article/details/80585941
3. dubbo
Dubbo采用全Spring配置方式,透明化接入應(yīng)用,對應(yīng)用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基于Spring的Schema擴展進(jìn)行加載。
例如:
發(fā)布服務(wù): <!-- 和本地服務(wù)一樣實現(xiàn)遠(yuǎn)程服務(wù) --> <bean id="xxxService" class="com.xxx.XxxServiceImpl" /> <!-- 增加暴露遠(yuǎn)程服務(wù)配置 --> <dubbo:service interface="com.xxx.XxxService" ref="xxxService" />調(diào)用服務(wù): <!-- 增加引用遠(yuǎn)程服務(wù)配置 --> <dubbo:reference id="xxxService" interface="com.xxx.XxxService" /> <!-- 和本地服務(wù)一樣使用遠(yuǎn)程服務(wù) --> <bean id="xxxAction" class="com.xxx.XxxAction"><property name="xxxService" ref="xxxService" /> </bean>在服務(wù)提供方和服務(wù)消費方的pom.xml中添加Dubbo依賴的jar包:
<!-- dubbo相關(guān) --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion><exclusion><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId></dependency>在Spring的配置文件中添加Dubbo約束:
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd <!-- 使用dubbo發(fā)布服務(wù) --><!-- 提供方應(yīng)用信息,用于計算依賴關(guān)系 --><dubbo:application name="taotao-manager" /><dubbo:registry protocol="zookeeper"address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" /><!-- 用dubbo協(xié)議在20880端口暴露服務(wù) --><dubbo:protocol name="dubbo" port="20880" /><!-- 聲明需要暴露的服務(wù)接口 --><dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300000"/> <!-- 引用dubbo服務(wù) --><dubbo:application name="taotao-manager-web"/><dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/> <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />Dubbo的監(jiān)控中心。。
4. zookeeper
Zookeeper的安裝:
第一步:安裝jdk
第二步:解壓縮zookeeper壓縮包
第三步:將conf文件夾下zoo_sample.cfg復(fù)制一份,改名為zoo.cfg
第四步:修改配置dataDir屬性,指定一個真實目錄
第五步:
啟動zookeeper:bin/zkServer.sh start
關(guān)閉zookeeper:bin/zkServer.sh stop
查看zookeeper狀態(tài):bin/zkServer.sh status
注意要關(guān)閉linux的防火墻。
5.圖片服務(wù)器FastDFS
分布式文件系統(tǒng)FastDFS(用來專門保存圖片)
使用FastDFS,分布式文件系統(tǒng)。存儲空間可以橫向擴展,可以實現(xiàn)服務(wù)器的高可用。支持每個節(jié)點有備份機。
FastDFS是用c語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份、負(fù)載均衡、線性擴容等機制,并注重高可用、高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
FastDFS架構(gòu)包括 Tracker server和Storage server。客戶端請求Tracker server進(jìn)行文件上傳、下載,通過Tracker server調(diào)度最終由Storage server完成文件上傳和下載。 Tracker server作用是負(fù)載均衡和調(diào)度,通過Tracker server在文件上傳時可以根據(jù)一些策略找到Storage server提供文件上傳服務(wù)。可以將tracker稱為追蹤服務(wù)器或調(diào)度服務(wù)器。 Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務(wù)器上,Storage server沒有實現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件。可以將storage稱為存儲服務(wù)器。
服務(wù)端兩個角色:Tracker:管理集群,tracker也可以實現(xiàn)集群。每個tracker節(jié)點地位平等。收集Storage集群的狀態(tài)。Storage:實際保存文件Storage分為多個組,每個組之間保存的文件是不同的。每個組內(nèi)部可以有多個成員,組成員內(nèi)部保存的內(nèi)容是一樣的,組成員的地位是一致的,沒有主從的概念。
客戶端上傳文件后存儲服務(wù)器將文件ID返回給客戶端,此文件ID用于以后訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數(shù)據(jù)兩級目錄,文件名。
組名:文件上傳后所在的storage組名稱,在文件上傳成功后有storage服務(wù)器返回,需要客戶端自行保存。
虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項store_path*對應(yīng)。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
數(shù)據(jù)兩級目錄:storage服務(wù)器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄,用于存儲數(shù)據(jù)文件。
文件名:與文件上傳時不同。是由存儲服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲服務(wù)器IP地址、文件創(chuàng)建時間戳、文件大小、隨機數(shù)和文件拓展名等信息。
服務(wù)器安裝方法見5.1
6.redis的配置與redis集群的搭建
Redis是c語言開發(fā)的。
安裝redis需要c語言的編譯環(huán)境。如果沒有g(shù)cc需要在線安裝。yum install gcc-c++
安裝步驟:第一步:redis的源碼包上傳到linux系統(tǒng)。第二步:解壓縮redis。第三步:編譯。進(jìn)入redis源碼目錄。make 第四步:安裝。make install PREFIX=/usr/local/redisPREFIX參數(shù)指定redis的安裝目錄。一般軟件安裝到/usr目錄下
redis的啟動:
前端啟動:在redis的安裝目錄下直接啟動redis-server
[root@localhost bin]# ./redis-server
后臺啟動:把/root/redis-3.0.0/redis.conf復(fù)制到/usr/local/redis/bin目錄下
[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/
修改配置文件:
[root@localhost bin]# ./redis-server redis.conf
查看redis進(jìn)程:
[root@localhost bin]# ps aux|grep redis
Redis-cli
[root@localhost bin]# ./redis-cli
默認(rèn)連接localhost運行在6379端口的redis服務(wù)。
[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:連接的服務(wù)器的地址
-p:服務(wù)的端口號
關(guān)閉redis:[root@localhost bin]# ./redis-cli shutdown
Redis的持久化方案
Redis的所有數(shù)據(jù)都是保存到內(nèi)存中的。Rdb:快照形式,定期把內(nèi)存中當(dāng)前時刻的數(shù)據(jù)保存到磁盤。Redis默認(rèn)支持的持久化方案。aof形式:append only file。把所有對redis數(shù)據(jù)庫操作的命令,增刪改操作的命令。保存到文件中。數(shù)據(jù)庫恢復(fù)時把所有的命令執(zhí)行一遍即可。
兩種持久化方案同時開啟使用aof文件來恢復(fù)數(shù)據(jù)庫。
Jedis
需要把jedis依賴的jar包添加到工程中。Maven工程中需要把jedis的坐標(biāo)添加到依賴。 推薦添加到服務(wù)層。Taotao-content-Service工程中。
第一步:創(chuàng)建一個Jedis對象。需要指定服務(wù)端的ip及端口。
第二步:使用Jedis對象操作數(shù)據(jù)庫,每個redis命令對應(yīng)一個方法。
第三步:打印結(jié)果。
第四步:關(guān)閉Jedis
第一步:創(chuàng)建一個JedisPool對象。需要指定服務(wù)端的ip及端口。
第二步:從JedisPool中獲得Jedis對象。
第三步:使用Jedis操作redis服務(wù)器。
第四步:操作完畢后關(guān)閉jedis對象,連接池回收資源。
第五步:關(guān)閉JedisPool對象。
第一步:使用JedisCluster對象。需要一個Set< HostAndPort>參數(shù)。Redis節(jié)點的列表。
第二步:直接使用JedisCluster對象操作redis。在系統(tǒng)中單例存在。
第三步:打印結(jié)果
第四步:系統(tǒng)關(guān)閉前,關(guān)閉JedisCluster對象。
添加緩存功能:
查詢內(nèi)容列表時添加緩存。
1、查詢數(shù)據(jù)庫之前先查詢緩存。
2、查詢到結(jié)果,直接響應(yīng)結(jié)果。
3、查詢不到,緩存中沒有需要查詢數(shù)據(jù)庫。
4、把查詢結(jié)果添加到緩存中。
5、返回結(jié)果。
向redis中添加緩存:
Key:cid
Value:內(nèi)容列表。需要把java對象轉(zhuǎn)換成json。
使用hash對key進(jìn)行歸類。
HASH_KEY:HASH
|–KEY:VALUE
|–KEY:VALUE
|–KEY:VALUE
|–KEY:VALUE
代碼的實現(xiàn):
@Overridepublic List<TbContent> getContentList(long cid) {//查詢緩存try { String json = jedisClient.hget(CONTENT_KEY, cid + ""); //判斷json是否為空 if (StringUtils.isNotBlank(json)) { //把json轉(zhuǎn)換成list List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class); return list; } } catch (Exception e) { e.printStackTrace(); } //根據(jù)cid查詢內(nèi)容列表 TbContentExample example = new TbContentExample(); //設(shè)置查詢條件 Criteria criteria = example.createCriteria(); criteria.andCategoryIdEqualTo(cid); //執(zhí)行查詢 List<TbContent> list = contentMapper.selectByExample(example); //向緩存中添加數(shù)據(jù) try { jedisClient.hset(CONTENT_KEY, cid + "", JsonUtils.objectToJson(list)); } catch (Exception e) { e.printStackTrace(); } return list;}緩存同步:
對內(nèi)容信息做增刪改操作后只需要把對應(yīng)緩存刪除即可。可以根據(jù)cid刪除。
7.solr服務(wù)器的搭建,solr集群與zookeeper集群的問題
solr需要安裝JDK,需要安裝Tomcat
搭建步驟
第一步:把solr 的壓縮包上傳到Linux系統(tǒng)
第二步:解壓solr。
第三步:安裝Tomcat,解壓縮即可。
第四步:把solr部署到Tomcat下。
第五步:解壓縮war包。啟動Tomcat解壓。
第六步:把/root/solr-4.10.3/example/lib/ext目錄下的所有的jar包,添加到solr工程中。[root@localhost ext]# pwd
/root/solr-4.10.3/example/lib/ext
[root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
第七步:創(chuàng)建一個solrhome。/example/solr目錄就是一個solrhome。復(fù)制此目錄到/usr/local/solr/solrhome
[root@localhost example]# pwd
/root/solr-4.10.3/example
[root@localhost example]# cp -r solr /usr/local/solr/solrhome
[root@localhost example]#
第八步:關(guān)聯(lián)solr及solrhome。需要修改solr工程的web.xml文件。
第九步:啟動Tomcat
http://192.168.25.154:8080/solr/
和windows下的配置完全一樣。
使用solrJ管理索引庫
添加文檔:
第一步:把solrJ的jar包添加到工程中。
第二步:創(chuàng)建一個SolrServer,使用HttpSolrServer創(chuàng)建對象。
第三步:創(chuàng)建一個文檔對象SolrInputDocument對象。
第四步:向文檔中添加域。必須有id域,域的名稱必須在schema.xml中定義。
第五步:把文檔添加到索引庫中。
第六步:提交。
刪除文檔:
第一步:創(chuàng)建一個SolrServer對象。
第二步:調(diào)用SolrServer對象的根據(jù)id刪除的方法。
第三步:提交。
查詢索引庫:
第一步:創(chuàng)建一個SolrServer對象
第二步:創(chuàng)建一個SolrQuery對象。
第三步:向SolrQuery中添加查詢條件、過濾條件。。。
第四步:執(zhí)行查詢。得到一個Response對象。
第五步:取查詢結(jié)果。
第六步:遍歷結(jié)果并打印。
什么是SolrCloud:
SolrCloud(solr 云)是Solr提供的分布式搜索方案,當(dāng)你需要大規(guī)模,容錯,分布式索引和檢索能力時使用 SolrCloud。當(dāng)一個系統(tǒng)的索引數(shù)據(jù)量少的時候是不需要使用SolrCloud的,當(dāng)索引量很大,搜索請求并發(fā)很高,這時需要使用SolrCloud來滿足這些需求。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作為集群的配置信息中心。
它有幾個特色功能:
1)集中式的配置信息
2)自動容錯
3)近實時搜索
4)查詢時自動負(fù)載均衡
Solr集群的系統(tǒng)架構(gòu):
1.1. 物理結(jié)構(gòu)
三個Solr實例( 每個實例包括兩個Core),組成一個SolrCloud。
1.2. 邏輯結(jié)構(gòu)
索引集合包括兩個Shard(shard1和shard2),shard1和shard2分別由三個Core組成,其中一個Leader兩個Replication,Leader是由zookeeper選舉產(chǎn)生,zookeeper控制每個shard上三個Core的索引數(shù)據(jù)一致,解決高可用問題。
用戶發(fā)起索引請求分別從shard1和shard2上獲取,解決高并發(fā)問題。
1.2.1. collection
Collection在SolrCloud集群中是一個邏輯意義上的完整的索引結(jié)構(gòu)。它常常被劃分為一個或多個Shard(分片),它們使用相同的配置信息。
比如:針對商品信息搜索可以創(chuàng)建一個collection。
collection=shard1+shard2+…+shardX 1
.2.2. Core
每個Core是Solr中一個獨立運行單位,提供 索引和搜索服務(wù)。一個shard需要由一個Core或多個Core組成。由于collection由多個shard組成所以collection一般由多個core組成。
1.2.3. Master或Slave
Master是master-slave結(jié)構(gòu)中的主結(jié)點(通常說主服務(wù)器),Slave是master-slave結(jié)構(gòu)中的從結(jié)點(通常說從服務(wù)器或備服務(wù)器)。同一個Shard下master和slave存儲的數(shù)據(jù)是一致的,這是為了達(dá)到高可用目的。
1.2.4. Shard
Collection的邏輯分片。每個Shard被化成一個或者多個replication,通過選舉確定哪個是Leader。
zookeeper作為集群的管理工具。
1、集群管理:容錯、負(fù)載均衡。
2、配置文件的集中管理
3、集群的入口 需要實現(xiàn)zookeeper 高可用。
需要搭建集群。建議是奇數(shù)節(jié)點。需要三個zookeeper服務(wù)器。 搭建solr集群需要7臺服務(wù)器。
搭建偽分布式:
需要三個zookeeper節(jié)點需要四個tomcat節(jié)點。 建議虛擬機的內(nèi)容1G以上。
- zookeeper集群搭建步驟和solr集群的搭建看day07
- spring配置全局異常處理器
8.activeMQ消息隊列
什么是ActiveMQ:
ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實現(xiàn),盡管JMS規(guī)范出臺已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位。
主要特點:
ActiveMQ的消息形式:
對于消息的傳遞有兩種類型:
一種是點對點的,即一個生產(chǎn)者和一個消費者一一對應(yīng);
另一種是發(fā)布/訂閱模式,即一個生產(chǎn)者產(chǎn)生消息并進(jìn)行發(fā)送后,可以由多個消費者進(jìn)行接收。
JMS定義了五種不同的消息正文格式,以及調(diào)用的消息類型,允許你發(fā)送并接收以一些不同形式的數(shù)據(jù),提供現(xiàn)有消息格式的一些級別的兼容性。
· StreamMessage – Java原始值的數(shù)據(jù)流
· MapMessage–一套名稱-值對
· TextMessage–一個字符串對象
· ObjectMessage–一個序列化的 Java對象
· BytesMessage–一個字節(jié)的數(shù)據(jù)流
ActiveMQ的安裝:
進(jìn)入http://activemq.apache.org/下載ActiveMQ
安裝環(huán)境:
1、需要jdk
2、安裝Linux系統(tǒng)。生產(chǎn)環(huán)境都是Linux系統(tǒng)。
安裝步驟:
第一步: 把ActiveMQ 的壓縮包上傳到Linux系統(tǒng)。
第二步:解壓縮。
第三步:啟動。
使用bin目錄下的activemq命令啟動:
[root@localhost bin]# ./activemq start
關(guān)閉:
[root@localhost bin]# ./activemq stop
查看狀態(tài):
[root@localhost bin]# ./activemq status
注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。建議使用5.11.2
進(jìn)入管理后臺:
http://192.168.25.168:8161/admin
用戶名:admin
密碼:admin
Activemq的使用方法及與Spring的整合
9.靜態(tài)頁面freemaker
商品詳情頁面展示,動態(tài)展示 jsp + redis
使用freemarker實現(xiàn)網(wǎng)頁靜態(tài)化
ActiveMq同步生成靜態(tài)網(wǎng)頁
什么是freemarker:
https://blog.csdn.net/culous/article/details/69948531
FreeMarker是一個用Java語言編寫的模板引擎,它基于模板來生成文本輸出。FreeMarker與Web容器無關(guān),即在Web運行時,它并不知道Servlet或HTTP。它不僅可以用作表現(xiàn)層的實現(xiàn)技術(shù),而且還可以用于生成XML,JSP或Java 等。
目前企業(yè)中:主要用Freemarker做靜態(tài)頁面或是頁面展示
使用步驟:
第一步:創(chuàng)建一個Configuration對象,直接new一個對象。構(gòu)造方法的參數(shù)就是freemarker對于的版本號。
第二步:設(shè)置模板文件所在的路徑。
第三步:設(shè)置模板文件使用的字符集。一般就是utf-8.
第四步:加載一個模板,創(chuàng)建一個模板對象。
第五步:創(chuàng)建一個模板使用的數(shù)據(jù)集,可以是pojo也可以是map。一般是Map。
第六步:創(chuàng)建一個Writer對象,一般創(chuàng)建一FileWriter對象,指定生成的文件名。第
七步:調(diào)用模板對象的process方法輸出文件。
第八步:關(guān)閉流。
網(wǎng)頁的靜態(tài)化方案:
輸出文件的名稱:商品id+“.html”
輸出文件的路徑:工程外部的任意目錄。
網(wǎng)頁訪問:使用nginx訪問網(wǎng)頁。在此方案下tomcat只有一個作用就是生成靜態(tài)頁面。
工程部署:可以把taotao-item-web部署到多個服務(wù)器上。
生成靜態(tài)頁面的時機:商品添加后,生成靜態(tài)頁面。可以使用Activemq,訂閱topic(商品添加)
商品詳情模塊實現(xiàn)
通過solr全文搜索找到商品;通過商品id去redis中找當(dāng)前id的緩存,找不到去數(shù)據(jù)庫中查找并添加到緩存中;
(為了提高redis的高可用,把不常訪問的商品從redis緩存中清除:使用定時)
每次點擊都會把key的時間重置,當(dāng)key在他的生命中沒有被點擊就會從redis中清除,再次訪問時再次添加。
兩方面影響用戶訪問速度:
數(shù)據(jù)庫查詢
使用緩存
服務(wù)器生成html頁面
使用freemaker生成靜態(tài)頁面
Freemaker生成靜態(tài)頁面的時機
添加商品后使用activemq廣播消息,freemaker監(jiān)聽到消息去數(shù)據(jù)庫查詢商品生成靜態(tài)頁面為什么不去redis中。
獲取商品信息,添加商品時還沒有存到redis中為什么不直接使用商品信息還要到數(shù)據(jù)庫中查詢:不在一個項目中傳輸數(shù)據(jù)麻煩,也起不到提高效率的作用;而且修改數(shù)據(jù)時也要修改靜態(tài)頁面。
Redis存儲數(shù)據(jù)庫表信息;
Key: 表名?字段
Value: 字段值
兩種方案:
一 redis緩存
二 網(wǎng)頁靜態(tài)化
10.nginx服務(wù)器的搭建
什么是nginx:
Nginx是一款高性能的http 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。由俄羅斯的程序設(shè)計師Igor Sysoev所開發(fā),官方測試nginx能夠支支撐5萬并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗卻非常低,運行非常穩(wěn)定。
應(yīng)用場景:
1、http服務(wù)器。Nginx是一個http服務(wù)可以獨立提供http服務(wù)。可以做網(wǎng)頁靜態(tài)服務(wù)器。
2、虛擬主機。可以實現(xiàn)在一臺服務(wù)器虛擬出多個網(wǎng)站。例如個人網(wǎng)站使用的虛擬主機。
3、反向代理,負(fù)載均衡。當(dāng)網(wǎng)站的訪問量達(dá)到一定程度后,單臺服務(wù)器不能滿足用戶的請求時,需要用多臺服務(wù)器集群可以使用nginx做反向代理。并且多臺服務(wù)器可以平均分擔(dān)負(fù)載,不會因為某臺服務(wù)器負(fù)載高宕機而某臺服務(wù)器閑置的情況。
nginx安裝:
官方網(wǎng)站:http://nginx.org/使用的版本是1.8.0版本。
安裝環(huán)境:
1、需要安裝gcc的環(huán)境。yum install gcc-c++
2、第三方的開發(fā)包。
PCRE:
PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達(dá)式庫。nginx的http模塊使用pcre來解析正則表達(dá)式,所以需要在linux上安裝pcre庫。yum install -y pcre pcre-devel
注:pcre-devel是使用pcre開發(fā)的一個二次開發(fā)庫。nginx也需要此庫。
zlib:
zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內(nèi)容進(jìn)行g(shù)zip,所以需要在linux上安裝zlib庫。
yum install -y zlib zlib-devel
openssl:
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測試或其它目的使用。
nginx不僅支持http協(xié)議,還支持https(即在ssl協(xié)議上傳輸http),所以需要在linux安裝openssl庫。
yum install -y openssl openssl-devel
安裝步驟:
第一步:把nginx的源碼包上傳到linux系統(tǒng)
第二步:解壓縮[root@localhost ~]# tar zxf nginx-1.8.0.tar.gz
第三步:使用configure命令創(chuàng)建一makeFile文件。
./configure
–prefix=/usr/local/nginx
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi
注意:啟動nginx之前,上邊將臨時文件目錄指定為/var/temp/nginx,需要在/var下創(chuàng)建temp及nginx目錄
[root@localhost sbin]# mkdir /var/temp/nginx/client -p
第四步:make
第五步:make install
啟動nginx:
進(jìn)入sbin目錄
[root@localhost sbin]# ./nginx
關(guān)閉nginx:
[root@localhost sbin]# ./nginx -s stop
推薦使用:
[root@localhost sbin]# ./nginx -s quit
重啟nginx:
1、先關(guān)閉后啟動。
2、刷新配置文件:
[root@localhost sbin]# ./nginx -s reload
訪問nginx:
默認(rèn)是80端口。注意:是否關(guān)閉防火墻。
- 配置虛擬主機 (http服務(wù)器)
- 反向代理
- 負(fù)載均衡
軟負(fù)載,硬負(fù)載
F5硬負(fù)載第四層負(fù)載 :傳輸層負(fù)載
nginx是第七層應(yīng)用層負(fù)載
LVS實現(xiàn)第四層的軟負(fù)載,能實現(xiàn)F5的60的負(fù)載功能 - 高可用
11.sso單點登陸系統(tǒng)
什么是sso系統(tǒng):
SSO英文全稱Single Sign On,單點登錄。SSO是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。它包括可以將這次主要的登錄映射到其他應(yīng)用中用于同一個用戶的登錄的機制。它是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。
購物車業(yè)務(wù)邏輯:
1、從cookie中查詢商品列表。
2、判斷商品在商品列表中是否存在。
3、如果存在,商品數(shù)量相加。
4、不存在,根據(jù)商品id查詢商品信息。
5、把商品添加到購車列表。
6、把購車商品列表寫入cookie。
小結(jié)
使用cookie實現(xiàn)購物車:
優(yōu)點:1、實現(xiàn)簡單2、不需要占用服務(wù)端存儲空間。
缺點:1、存儲容量有限2、更換設(shè)備購車信息不能同步。
實現(xiàn)購車商品數(shù)據(jù)同步:
1、要求用戶登錄。
2、把購物車商品列表保存到數(shù)據(jù)庫中。推薦使用redis(用戶會頻繁操作購物車)。
3、Key:用戶id,value:購車商品列表。推薦使用hash,hash的field:商品id,value:商品信息。Key 用戶id
Value
Key 商品id
Value 商品json
4、在用戶未登錄情況下寫cookie。當(dāng)用戶登錄后,訪問購物車列表時,
a) 把cookie中的數(shù)據(jù)同步到redis。
b) 把cookie中的數(shù)據(jù)刪除
c) 展示購物車列表時以redis為準(zhǔn)。
d) 如果redis中有數(shù)據(jù)cookie中也有數(shù)據(jù),需要做數(shù)據(jù)合并。相同商品數(shù)量相加,不同商品添加一個新商品。
5、如果用戶登錄狀態(tài),展示購物車列表以redis為準(zhǔn)。如果未登錄,以cookie為準(zhǔn)
12.mybatis分頁插件pagehelper
13.項目部署
項目架構(gòu)講解:
網(wǎng)絡(luò)拓?fù)鋱D:
系統(tǒng)部署:
部署分析
Taotao-manager
Taotao-manager-web
Taotao-portal-web
Taotao-content
Taotao-searchT
aotao-search-web
Taotao-item-web
Taotao-sso
Taotao-sso-web
Taotao-cart-web
Taotao-order
Taotao-order-web
需要24臺服務(wù)器。 24
Mysql 2
Solr 7
Redis 6
圖片服務(wù)器 2
Nginx 2
注冊中心 3
Activemq 2
共需要48臺服務(wù)器。
項目部分詳解:
商品管理:
1.1商品查詢業(yè)務(wù):
查詢所有的商品信息,商品的分頁采用的是pagehelp插件,將商品信息查詢出來的信息放到pageinfo對象里面,設(shè)置分頁信息,當(dāng)前頁和每頁顯示多少條數(shù)據(jù),第一次查詢的時候會先查詢redis里面有沒有數(shù)據(jù),如果有 直接取出來,取出來的是一個json,需要將json轉(zhuǎn)化成對象,如果沒有就從數(shù)據(jù)里面查出來,同時會存進(jìn)redis里面去。(總之第一次查詢的時候必須是先走redis)
1.2商品添加業(yè)務(wù):
在商品添加界面錄入商品信息,商品的id,商品標(biāo)題,商品賣點,商品價格,庫存數(shù)量,商品條形碼,商品圖片,商品類別,商品狀態(tài)(1-正常,2-下架,3-刪除’),創(chuàng)建時間,更新時間,商品的描述。其中圖片存儲考慮到數(shù)量比較多,采用的是分布式文件存儲系統(tǒng)(fastdfs),圖片多了可以搭建集群。商品的描述采用的是富文本編輯器,將錄入的商品信息分別插入對應(yīng)的不同的表,商品添加時還需要和redis數(shù)據(jù)庫進(jìn)行同步,同時也會添加到redis里面去做緩存。
圖片上傳操作的步驟:
商品類目管理:
2.1商品類目查詢業(yè)務(wù):
商品分類列表,使用EasyUI的tree控件展示,前端需要返回的json數(shù)據(jù)字段有,id,text,state;text:節(jié)點的名稱,state:如果節(jié)點下有子節(jié)點“closed”,如果沒有子節(jié)點“open”。數(shù)據(jù)的顯示采用的是異步加載。點擊父節(jié)點才會加載父節(jié)點下的子節(jié)點。查詢的條件是parent_id父節(jié)點的id,默認(rèn)值我們給的是0,根據(jù)parent_id作為條件查詢出來的數(shù)據(jù),封裝在自己定義的pojo里面,然后在轉(zhuǎn)化成json,回顯給界面 。
2.2商品類目添加業(yè)務(wù):
在某個節(jié)點上添加信息,首先拿到該節(jié)點的id,插入一條數(shù)據(jù)時,將id當(dāng)成父節(jié)點的字段插入進(jìn)去,如果之前的節(jié)點有葉子節(jié)點就不用管,沒有葉子節(jié)點,要把之前的狀態(tài)改成有子節(jié)點的狀態(tài)。
網(wǎng)站內(nèi)容管理(CMS)
3.1內(nèi)容分類查詢業(yè)務(wù):
內(nèi)容分類列表,使用EasyUI的tree控件展示,前端需要返回的json數(shù)據(jù)字段有,id ,text,state;text:節(jié)點的名稱,state:如果節(jié)點下有子節(jié)點“closed”,如果沒有子節(jié)點“open”。數(shù)據(jù)的顯示采用的是異步加載。點擊父節(jié)點才會加載父節(jié)點下的子節(jié)點。查詢的條件是parent_id父節(jié)點的id,默認(rèn)值我們給的是0,根據(jù)parent_id作為條件查詢出來的數(shù)據(jù),封裝在自己定義的pojo里面,然后在轉(zhuǎn)化成json,回顯給界面
3.2重命名業(yè)務(wù):
根據(jù)id查詢該節(jié)點的對象,拿到這個對象之后,修改該對象的名字。改完之后把該對象當(dāng)做參數(shù)去修改
3.3刪除業(yè)務(wù):
根據(jù)id修改對應(yīng)表里面的刪除字段狀態(tài),1表示存在,0表示刪除,刪除節(jié)點的同時還需要判斷該節(jié)點的父節(jié)點是否有子節(jié)點存在,如果不存在,要把父節(jié)點的那條數(shù)據(jù)的狀態(tài)改成沒有子節(jié)點
3.4內(nèi)容查詢業(yè)務(wù)
根據(jù)內(nèi)容的分類,查詢對應(yīng)分類的廣告內(nèi)容信息。拿到內(nèi)容分類id,在內(nèi)容管理表里面查詢,在將返回的對象轉(zhuǎn)換成json數(shù)據(jù)顯示在頁面。
3.5內(nèi)容刪除業(yè)務(wù)
刪除是改變對應(yīng)數(shù)據(jù)里面對應(yīng)的狀態(tài),如果需要同步到redis里面去,還需要把redis里面對應(yīng)的K刪掉,下次再查詢的的時候,發(fā)現(xiàn)redis沒有對應(yīng)的k,會再次同步到redis中去。
廣告位
1.輪播圖業(yè)務(wù)
選中大廣告節(jié)點,拿到內(nèi)容分類大廣告的id,在內(nèi)容管理里面插入數(shù)據(jù),進(jìn)入到大廣告添加的界面錄入信息,內(nèi)容的標(biāo)題,內(nèi)容的子標(biāo)題,內(nèi)容的描述,url地址,圖片信息,內(nèi)容,圖片使用的是fastdfs,內(nèi)容采用的是富文本編輯器。添加之后需要和redis進(jìn)行同步。下次回顯數(shù)據(jù)的時候從redis里面查,如果沒有就從數(shù)據(jù)里面查詢
商品搜索
5.1同步solr庫業(yè)務(wù)
在solr配置文件schema.xml中定義要搜索的域,里面有商品Id,商品標(biāo)題,商品賣點,商品價格,商品圖片,分類名稱,商品描述。首先查詢出所有的商品數(shù)據(jù),查詢出來之后再創(chuàng)建一個solrServer對象。在為每個商品創(chuàng)建一個SolrInputDocument對象,將查詢出來的商品數(shù)據(jù)循環(huán)遍歷添加到SolrInputDocument對象里面去,在將SolrInputDocument對象添加到SolrServer對象里面。
5.2商品搜索業(yè)務(wù)
商品搜索用到了solr技術(shù),根據(jù)IK分詞器,對查詢的條件進(jìn)行查詢,首先創(chuàng)建一個SolrQuery對象作為商品搜索的查詢條件,設(shè)置分頁條件,指定默認(rèn)的搜索域,設(shè)置高亮,執(zhí)行查詢,計算出總頁數(shù)和總條數(shù),返回一個QueryResponse結(jié)果集,在將結(jié)果集循環(huán)遍歷添加到自己定義的集合里面,返回給頁面,一個商品的圖片有多個地址,需要將圖片的地址分切轉(zhuǎn)化成數(shù)組,頁面顯示的時候取數(shù)組的下標(biāo)為0,取出一張圖片就可以了。
商品詳情頁:
商品詳情頁采用的是FreeMarker模板引擎技術(shù),生成一個靜態(tài)化頁面。這樣能減輕服務(wù)器的壓力。首先創(chuàng)建一個Configuration對象,這個對象有個參數(shù),參數(shù)是FreeMarker的版本號,拿到這個Configuration對象之后設(shè)置模板所在的路徑,在設(shè)置模板文件使用的字符集,設(shè)置完之后加載一個模板,創(chuàng)建一個模板對象,模板創(chuàng)建之后會把查詢出來的數(shù)據(jù)放到模板里面。
購物車:
購物車的實現(xiàn)功能考慮到兩種情況,登錄的時候商品存在哪里,沒有登錄的時候商品信息存在哪里。沒有登錄的時候我們將商品信息保存在cookie里面,在保存之前我們會先在cookie里面先查詢有沒有該商品,如果該商品存在只需要修改該商品的數(shù)量即可,如果cookie里面不存在,就把商品信息添加到cookie里面去。登錄的時候我們將商品保存到redis里面去,這個時候需要將cookie和redis里面的商品進(jìn)行合并,同時需要刪除cookie里面的數(shù)據(jù)。
SSO
用戶注冊業(yè)務(wù):
客戶端發(fā)送請求到后臺,需要校驗用戶名和密碼不能為空,用戶名,電話,郵箱是否已經(jīng)被使用,如果都通過將接受到的密碼用MD5進(jìn)行加密,然后在插入到數(shù)據(jù)里面去。
用戶登錄業(yè)務(wù):
在登錄界面輸入用戶名和密碼之后點擊登錄按鈕,action接受用戶名和密碼,根據(jù)用戶名查詢密碼,將用戶輸入的密碼進(jìn)行MD5加密,然后在和數(shù)據(jù)庫里面的值進(jìn)行對比,如果成立就生成一個token的變量。token的值由uuid生成。在將用戶信息存到redis里面。Key是token,value就是用戶信息,在設(shè)置redis的過去時間,一般半個小時,再把token寫入到cookie中。客戶端發(fā)送請求的時候,從cookie里面拿到token的值,把值拿到之后再redis里面當(dāng)成k來取出用戶信息看是都存在,存在登錄成功。
總結(jié)
以上是生活随笔為你收集整理的关于淘淘商城的一些基本说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湖南省工信厅党组书记、厅长雷绍业一行莅临
- 下一篇: 无盘服务器内存问题,无盘服务器内存占用过