solr,什么是solr,就是你要吃的東西“餿了”,不能吃了,out of date~
嘛。。。開個(gè)玩笑,發(fā)音就是‘搜了’,專門用于搜索的一個(gè)開源框架,lunce就不說了,不好用,麻煩
來講講solr吧
目前最新更新的是6.0,4月7-8號(hào)更新的,哥不太喜歡用新出來的版本,多多少少會(huì)有bug,centos7出來后我至今使用的是6.5(實(shí)在無法忍受7啊。。。西吧)
6.0我也試著裝了,但是會(huì)報(bào)錯(cuò),日志文件找不到,自己新建一個(gè)也不行,去官方的jira看看,發(fā)現(xiàn)的確有這么一個(gè)bug,但是已經(jīng)close狀態(tài),估計(jì)fix了吧
那么拋棄6.0不說,我們先來講講上一個(gè)版本5.5吧
首先你得下載這個(gè)版本的包
地址:
http://archive.apache.org/dist/lucene/solr/5.5.0/

下載后上傳(chuang)到你的linux上
如下我是放到這個(gè)文件夾下,并且解壓至此

名字太復(fù)雜了啦~!砸門改一個(gè)!

好,入正題
在solr5以后,自帶了jetty作為服務(wù)器,可以自行啟動(dòng),自帶的要比曾經(jīng)的solr4使用tomcat方便一點(diǎn)
cd solr5 進(jìn)入后
如此運(yùn)行:

啟動(dòng)solr ...
啟動(dòng)成功,happy searching?。楹挝彝蝗幌氲搅薍HKB? 跪求送一把啊~~~)
那么8983就是搜索服務(wù)的端口啦
看到木有,啟動(dòng)成功了... 這logo我也就不說了,我當(dāng)初的第一反應(yīng)就是華為

這邊是一些版本信息:

好,以上是jetty,簡單吧
那么有的童鞋喜歡用tomcat部署咋辦捏
好就是tomcat吧,雖然略嫌麻煩,既然官方使用jetty,那肯定自然是有他的理由的嘍

把tomcat7解壓到這個(gè)目錄并且重命名

將solr5\server\solr-webapp目錄下的webapp文件夾拷貝到tomcat7下webapps下,并改名為solr

[圖片上傳中。。。(10)]
在solr5/server/lib/ext 目錄中

所有的jar包添加到solr工程中


記住此目錄
修改剛剛放進(jìn)tomcat7中的solr的web.xml
放開注釋,并且替換第二行白色的部分為剛剛的目錄

:wq保存退出
拷貝日志文件到tomcat7下solr的classes中

最后一步:
啟動(dòng)tomcat

日志:

截圖留念:

版本信息,tomcat7噢~
[圖片上傳中。。。(19)]
接下來的文章會(huì)對solr集群,zookeeper等做介紹以及詳細(xì)講解,歡迎關(guān)注并訂閱我的頭條號(hào)以及微信公眾號(hào),一起學(xué)習(xí)一起進(jìn)步吧~solr,什么是solr,就是你要吃的東西“餿了”,不能吃了,out of date~
嘛。。。開個(gè)玩笑,發(fā)音就是‘搜了’,專門用于搜索的一個(gè)開源框架,lunce就不說了,不好用,麻煩
來講講solr吧
目前最新更新的是6.0,4月7-8號(hào)更新的,哥不太喜歡用新出來的版本,多多少少會(huì)有bug,centos7出來后我至今使用的是6.5(實(shí)在無法忍受7啊。。。西吧)
6.0我也試著裝了,但是會(huì)報(bào)錯(cuò),日志文件找不到,自己新建一個(gè)也不行,去官方的jira看看,發(fā)現(xiàn)的確有這么一個(gè)bug,但是已經(jīng)close狀態(tài),估計(jì)fix了吧
那么拋棄6.0不說,我們先來講講上一個(gè)版本5.5吧
首先你得下載這個(gè)版本的包
地址:
http://archive.apache.org/dist/lucene/solr/5.5.0/

下載后上傳(chuang)到你的linux上
如下我是放到這個(gè)文件夾下,并且解壓至此

名字太復(fù)雜了啦~!砸門改一個(gè)!

好,入正題
在solr5以后,自帶了jetty作為服務(wù)器,可以自行啟動(dòng),自帶的要比曾經(jīng)的solr4使用tomcat方便一點(diǎn)
cd solr5 進(jìn)入后
如此運(yùn)行:

啟動(dòng)solr ...
啟動(dòng)成功,happy searching?。楹挝彝蝗幌氲搅薍HKB? 跪求送一把啊~~~)
那么8983就是搜索服務(wù)的端口啦
看到木有,啟動(dòng)成功了... 這logo我也就不說了,我當(dāng)初的第一反應(yīng)就是華為

這邊是一些版本信息:

好,以上是jetty,簡單吧
那么有的童鞋喜歡用tomcat部署咋辦捏
好就是tomcat吧,雖然略嫌麻煩,既然官方使用jetty,那肯定自然是有他的理由的嘍

把tomcat7解壓到這個(gè)目錄并且重命名

將solr5\server\solr-webapp目錄下的webapp文件夾拷貝到tomcat7下webapps下,并改名為solr

[圖片上傳中。。。(10)]
在solr5/server/lib/ext 目錄中

所有的jar包添加到solr工程中


記住此目錄
修改剛剛放進(jìn)tomcat7中的solr的web.xml
放開注釋,并且替換第二行白色的部分為剛剛的目錄

:wq保存退出
拷貝日志文件到tomcat7下solr的classes中

最后一步:
啟動(dòng)tomcat

日志:
[圖片上傳中。。。(17)]
截圖留念:

版本信息,tomcat7噢~

接下來的文章會(huì)對solr集群,zookeeper等做介紹以及詳細(xì)講解,歡迎關(guān)注并訂閱我的頭條號(hào)以及微信公眾號(hào),一起學(xué)習(xí)一起進(jìn)步吧~Redis真是好,其中的鍵值用起來真心強(qiáng)大啊有木有,
之前的文章講過搭建了redis集群
那么咋們該如何調(diào)用單機(jī)版的redis以及集群版的redis來使用緩存服務(wù)呢?
先講講單機(jī)版的,單機(jī)版redis安裝非常簡單,不多說了,直接使用命令:
1 [root@nginx bin]# ./redis-server redis.conf
啟動(dòng)就行
在sprig文件中配置如下
<!--
TODO:
開發(fā)環(huán)境使用單機(jī)版
生產(chǎn)環(huán)境務(wù)必切換成集群
-->
<!-- 配置redis客戶端單機(jī)版 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="${redis.single.client.host}"></constructor-arg>
<constructor-arg name="port" value="${redis.single.client.port}"></constructor-arg>
</bean>
<!-- 配置redis客戶端實(shí)現(xiàn)類 -->
<bean id="jedisClientSingle" class="com.lee.rest.component.impl.JedisClientSingle"/>
<!-- 配置redis客戶端集群版 單機(jī)版和集群版的jedis只能存在一個(gè) -->
<!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg>
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis01.real.cluster.client.host}"/>
<constructor-arg name="port" value="${redis01.real.cluster.client.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis02.real.cluster.client.host}"/>
<constructor-arg name="port" value="${redis02.real.cluster.client.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis03.real.cluster.client.host}"/>
<constructor-arg name="port" value="${redis03.real.cluster.client.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis04.real.cluster.client.host}"/>
<constructor-arg name="port" value="${redis04.real.cluster.client.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis05.real.cluster.client.host}"/>
<constructor-arg name="port" value="${redis05.real.cluster.client.port}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis06.real.cluster.client.host}"/>
<constructor-arg name="port" value="${redis06.real.cluster.client.port}"/>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisClientCluster" class="com.lee.rest.component.impl.JedisClientCluster"/> -->
這是配置的redis-cli的連接池
然后定義一個(gè)接口,這個(gè)接口供兩個(gè)類實(shí)現(xiàn)
一個(gè)是單機(jī)版,一個(gè)是集群版
有人會(huì)問為啥要2個(gè)類實(shí)現(xiàn),因?yàn)閞edis的單機(jī)和集群都是不同的實(shí)現(xiàn)方法
一般在開發(fā)環(huán)境會(huì)使用單機(jī)版來做測試,生產(chǎn)環(huán)境直接上集群
#fake cluster
redis.single.client.host=192.168.1.191
redis.single.client.port=6379
redis01.cluster.client.host=192.168.1.192
redis01.cluster.client.port=7001
redis02.cluster.client.host=192.168.1.192
redis02.cluster.client.port=7002
redis03.cluster.client.host=192.168.1.192
redis03.cluster.client.port=7003
redis04.cluster.client.host=192.168.1.192
redis04.cluster.client.port=7004
redis05.cluster.client.host=192.168.1.192
redis05.cluster.client.port=7005
redis06.cluster.client.host=192.168.1.192
redis06.cluster.client.port=7006
在你的資源文件中配好如上信息,供spring調(diào)用
說個(gè)題外話,資源文件*.properties,在spring的父子容器中不是公用的
也就是說,在service的spring容器中,只能配service層調(diào)用
在springMVC容器中只能被springmvc自己調(diào)用,因?yàn)橘Y源文件不是夸容器的
而spring容器中的對象是可以被springMVC來訪問的
但是springMVC的對象以及資源文件絕對不能被spring來訪問,
舉個(gè)栗子:你有見過service訪問controller的嗎?沒有吧,哈哈
咱們先來建一個(gè)通用jedis客戶端
(有2個(gè)小家伙看不懂最后2個(gè)方法什么意思,就加了注釋,其實(shí)規(guī)范點(diǎn)來講,所有的接口方法都要加注釋,而實(shí)現(xiàn)類就不需要,但是實(shí)現(xiàn)類中的私有方法必須加注釋,這是規(guī)范)
package com.lee.rest.component;
/**
*
* @Title: JedisClient.java
* @Package com.lee.rest.component
* @Description: redis客戶端
* Copyright: Copyright (c) 2016
* Company:Nathan.Lee.Salvatore
*
* @author leechenxiang
* @date 2016年4月27日 下午4:28:46
* @version V1.0
*/
public interface JedisClient {
public String set(String key, String value);
public String get(String key);
public Long hset(String key, String item, String value);
public String hget(String key, String item);
public Long hdel(String key, String item);
public Long incr(String key);
public Long decr(String key);
/**
*
* @Description: 設(shè)置存存活時(shí)間
* @param key
* @param second
* @return
*
* @author leechenxiang
* @date 2016年4月27日 下午4:34:35
*/
public Long expire(String key, int second);
/**
*
* @Description: 判斷key多久過期
* @param key
* @return 秒
* >= 0 剩余秒數(shù)
* = -1 永久存活
* = -2 已經(jīng)消除
*
* @author leechenxiang
* @date 2016年4月27日 下午4:34:22
*/
public Long ttl(String key);
}
/**
*
* @Title: JedisClientSingle.java
* @Package com.lee.rest.component.impl
* @Description: 單機(jī)版的jedis客戶端操作
* Copyright: Copyright (c) 2016
* Company:Nathan.Lee.Salvatore
*
* @author leechenxiang
* @date 2016年4月27日 下午4:36:42
* @version V1.0
*/
public class JedisClientSingle implements JedisClient {
@Autowired
private 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 Long hset(String key, String item, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key, item, value);
jedis.close();
return result;
}
@Override
public String hget(String key, String item) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, item);
jedis.close();
return result;
}
@Override
public Long hdel(String key, String item) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key, item);
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 decr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.decr(key);
jedis.close();
return result;
}
@Override
public Long expire(String key, int second) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, second);
jedis.close();
return result;
}
@Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}
}
/**
*
* @Title: JedisClientCluster.java
* @Package com.lee.rest.component.impl
* @Description: 集群版的jedis客戶端操作
* Copyright: Copyright (c) 2016
* Company:Nathan.Lee.Salvatore
*
* @author leechenxiang
* @date 2016年4月27日 下午4:44:02
* @version V1.0
*/
public class JedisClientCluster implements JedisClient {
@Autowired
private 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 Long hset(String key, String item, String value) {
return jedisCluster.hset(key, item, value);
}
@Override
public String hget(String key, String item) {
return jedisCluster.hget(key, item);
}
@Override
public Long hdel(String key, String item) {
return jedisCluster.hdel(key, item);
}
@Override
public Long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public Long decr(String key) {
return jedisCluster.decr(key);
}
@Override
public Long expire(String key, int second) {
return jedisCluster.expire(key, second);
}
@Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
}
}
使用地方,一般都是在service中調(diào)用,把需要加緩存的地方都實(shí)現(xiàn)接口
取之前查詢有沒有緩存,有直接返回,沒有查數(shù)據(jù)庫,然后再放入緩存
也有企業(yè)會(huì)這么做,所有的緩存都有一個(gè)團(tuán)隊(duì)來管理,做一個(gè)定時(shí)器,每天凌晨固定一個(gè)時(shí)間點(diǎn)來跑批,把數(shù)據(jù)放入緩存
這么做也是可以的
我們采取的是第一種
PS:@Autowired 這邊是用的類型相同,有人喜歡用@resource,這樣的話就得多寫一個(gè),區(qū)別點(diǎn)
@Autowired
private JedisClient jedisClient;
@Value("${REDIS_CONTENT_KEY}")
private String REDIS_CONTENT_KEY;
@Override
public List<Content> gettList(Long id) {
// TODO 這個(gè)地方加緩存和不加緩存,單臺(tái)或者集群的redis,都要進(jìn)行壓力測試
//添加緩存
//查詢數(shù)據(jù)庫之前先查詢緩存,如果有直接返回
try {
//從redis中取緩存數(shù)據(jù)
String json = jedisClient.hget(REDIS_CONTENT_KEY, id + "");
if (!StringUtils.isBlank(json)) {
//把json轉(zhuǎn)換成List
List<Content> list = JsonUtils.jsonToList(json, Content.class);
return list;
}
} catch (Exception e) {
e.printStackTrace();
}
//執(zhí)行查詢
List<?> list = xxxMapper.select(id);
// 返回結(jié)果之前,向緩存中添加數(shù)據(jù)
try {
// 為了規(guī)范key可以使用hash
// 定義一個(gè)保存內(nèi)容的key,hash中每個(gè)項(xiàng)就是cid
// value是list,需要把list轉(zhuǎn)換成json數(shù)據(jù)。
jedisClient.hset(REDIS_CONTENT_KEY, id + "", JsonUtils.objectToJson(list));
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
那么service就好了,集群版的也通用
那么集群的配置如何呢?
放開注釋
使用資源文件的配置
好了,啟動(dòng)一下就可以運(yùn)行了
配置好Test或者controller都可以調(diào)用
但是要做好緩存同步,也就是在增加,修改,刪除數(shù)據(jù)后,要同步緩存,把原有的del,在放入新的
這樣就可以了`~
尚自習(xí) | 程序員的進(jìn)階平臺(tái) itzixi.com


Java技術(shù)交流群solr,什么是solr,就是你要吃的東西“餿了”,不能吃了,out of date~
嘛。。。開個(gè)玩笑,發(fā)音就是‘搜了’,專門用于搜索的一個(gè)開源框架,lunce就不說了,不好用,麻煩
來講講solr吧
目前最新更新的是6.0,4月7-8號(hào)更新的,哥不太喜歡用新出來的版本,多多少少會(huì)有bug,centos7出來后我至今使用的是6.5(實(shí)在無法忍受7啊。。。西吧)
6.0我也試著裝了,但是會(huì)報(bào)錯(cuò),日志文件找不到,自己新建一個(gè)也不行,去官方的jira看看,發(fā)現(xiàn)的確有這么一個(gè)bug,但是已經(jīng)close狀態(tài),估計(jì)fix了吧
那么拋棄6.0不說,我們先來講講上一個(gè)版本5.5吧
首先你得下載這個(gè)版本的包
地址:
http://archive.apache.org/dist/lucene/solr/5.5.0/

下載后上傳(chuang)到你的linux上
如下我是放到這個(gè)文件夾下,并且解壓至此

名字太復(fù)雜了啦~!砸門改一個(gè)!

好,入正題
在solr5以后,自帶了jetty作為服務(wù)器,可以自行啟動(dòng),自帶的要比曾經(jīng)的solr4使用tomcat方便一點(diǎn)
cd solr5 進(jìn)入后
如此運(yùn)行:

啟動(dòng)solr ...
啟動(dòng)成功,happy searching?。楹挝彝蝗幌氲搅薍HKB? 跪求送一把啊~~~)
那么8983就是搜索服務(wù)的端口啦
看到木有,啟動(dòng)成功了... 這logo我也就不說了,我當(dāng)初的第一反應(yīng)就是華為

這邊是一些版本信息:

好,以上是jetty,簡單吧
那么有的童鞋喜歡用tomcat部署咋辦捏
好就是tomcat吧,雖然略嫌麻煩,既然官方使用jetty,那肯定自然是有他的理由的嘍

把tomcat7解壓到這個(gè)目錄并且重命名

將solr5\server\solr-webapp目錄下的webapp文件夾拷貝到tomcat7下webapps下,并改名為solr


在solr5/server/lib/ext 目錄中

所有的jar包添加到solr工程中


記住此目錄
修改剛剛放進(jìn)tomcat7中的solr的web.xml
放開注釋,并且替換第二行白色的部分為剛剛的目錄

:wq保存退出
拷貝日志文件到tomcat7下solr的classes中

最后一步:
啟動(dòng)tomcat

日志:
[圖片上傳中。。。(17)]
截圖留念:

版本信息,tomcat7噢~
[圖片上傳中。。。(19)]
接下來的文章會(huì)對solr集群,zookeeper等做介紹以及詳細(xì)講解,歡迎關(guān)注并訂閱我的頭條號(hào)以及微信公眾號(hào),一起學(xué)習(xí)一起進(jìn)步吧~