Redis 一二事 - 在spring中使用jedis 連接調(diào)試單機(jī)redis以及集群redis

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

微信公眾號(hào):BeJavaGod

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)步吧~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,282評論 6 342
  • 兩年前用過solr5.1版本的,當(dāng)時(shí)只是簡單入個(gè)門,拿來在項(xiàng)目里建個(gè)全文索引,然后再query,其他什么也沒做,還...
    Coselding閱讀 3,250評論 3 22
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,659評論 19 139
  • 呼倫貝爾大草原約會(huì)游的第一天(第一天沒去游景點(diǎn),坐車,坐飛機(jī),坐車,到酒店,休息,自由安排。好玩的要先休息...
    禾斗_e840閱讀 775評論 0 1
  • 那年,我們都還小。彼此不懂真情為何物、真愛為何途、真心為何用,只知真理為何容;我們的故事還要從那時(shí)而起。 我是一個(gè)...
    青年寫作閱讀 375評論 0 1

友情鏈接更多精彩內(nèi)容