1. 程式人生 > >redis單機版安裝+測試+專案運用

redis單機版安裝+測試+專案運用

【簡介】

Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。     應用場景:前臺有一部分內容經常被大量多次的訪問的情況下就有必要使用redis了     優點:減少了對資料的訪問,使得對使用者的相應請求更加迅速

【安裝步驟】

    第一步:安裝gcc編譯環境
      命令:yum install gcc-c++
    第二步:將redis的原始碼上傳到linux伺服器中
      可以直接在百度中搜索redis-3.0.0.tar.gz
    第三步:解壓縮
      tar -zxvf redis-3.0.0.tar.gz
    第四步:進入解壓後的redis資料夾中,輸入命令:make
    第五步:安裝輸入命令: make install PREFIX=/usr/local/redis/
      注:/usr/local/redis/為安裝的redis的位置,最後的/不可省略

【啟動redis】

    前端啟動:進入redis安裝目錄,輸入命令:./redis-server
      這樣的形式不利於操作,一般採用後臺啟動
    後臺啟動:
      1.將安裝步驟中的第三步,解壓縮的資料夾中的redis.conf複製到redis的安裝目錄
      2.修改redis.conf內容中的daemonize no   為daemonize yes
      3.輸入命令啟動:./redis-server redis.conf
      注:後臺啟動之後可以輸入ps aux|grep redis  檢視程序是否啟動,這樣配置預設的ip為localhost(127.0.0.1)  預設的埠號為 6379 ;如下圖所示為啟動成功

【測試redis】

    dos命令測試
      1.進入redis安裝目錄
      2.輸入命令:./redis-cli -p 6379 -h 192.168.37.10 -c(最後的-c是一定要有的)
      通過set設定值,get獲取值進行測試,如下圖所示
    專案中測試(通過jedis進行測試)
      1.引入jedis依賴的jar包: jedis-2.7.2.jar
      2.編寫測試方法,如下程式碼
-
package com.taotao.jedis;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisTest {

	//單機版
	@Test
	public void testJedisSingle() throws Exception{
		//建立一個jedis物件
		Jedis jedis = new Jedis("192.168.37.10",6379);
		jedis.set("test", "hello jedis");
		String string = jedis.get("test");
		System.out.println(string);
		jedis.close();
	}
	
	//使用連線池
	@Test
	public void testJedisPool() throws Exception{
		//建立一個連結池物件
		//系統中應該是單例的
		JedisPool jedisPool = new JedisPool("192.168.37.10",6379);
		//從連線池中獲得一個連線
		Jedis jedis = jedisPool.getResource();
		String result = jedis.get("test");
		System.out.println(result);
		//jedis必須關閉
		jedis.close();
		
		
		
		//系統關閉時關閉連線池
		jedisPool.close();
	}

}
-

【專案運用】

    思路:建立一個jedis操作的介面,建立一個實體類來實現redis的介面

    jedis的介面類

-
package com.taotao.rest.component;

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 incr(String key);
	public Long decr(String key);
	public Long expire(String key,int second);
	public Long ttl(String key);
	public Long hdel(String key,String item);
}
-
    

    jedis的實現類

-
package com.taotao.rest.component.impl;

import org.springframework.beans.factory.annotation.Autowired;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import com.taotao.rest.component.JedisClient;

/**
 * redis客戶端單機版實現類
 * @author	mk
 * @date	2017年2月8日下午9:34:39
 * @version 1.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 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;
	}

	@Override
	public Long hdel(String key, String item) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hdel(key,item);
		jedis.close();
		return result;
	}

}
-

    spring配置

-
<!-- 配置redis客戶端單機版 -->
	 <bean id="jedisPool" class="redis.clients.jedis.JedisPool" >
		<constructor-arg name="host" value="192.168.37.10"></constructor-arg>
		<constructor-arg name="port" value="6379"></constructor-arg>
	</bean>
	<!-- 配置redis客戶端實現類 -->
	<bean id="jedisClientSingle" class="com.taotao.rest.component.impl.JedisClientSingle"/>
-
    

    service中的運用(REDIS_CONTENT_KEY為固定的一個規範,在配置檔案中自己設定就可以了)

-
@Override
	public List<TbContent> getContentList(Long cid) {
		//新增快取
		//查詢資料庫之前先查詢快取,如果有直接返回
		try {
			//從redis中取快取資料
			String json = jedisClient.hget(REDIS_CONTENT_KEY, cid+"");
			if (!StringUtils.isBlank(json)) {
				//把json轉換成list
				List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
				return list;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//根據cid查詢內容列表
		TbContentExample example = new TbContentExample();
		Criteria criteria = example.createCriteria();
		criteria.andCategoryIdEqualTo(cid);
		//執行查詢
		List<TbContent> list = contentMapper.selectByExample(example);
		
		//返回結果之前,向快取中新增資料
		try {
			//為了規範key可以使用hash
			//定義一個儲存內容的key,hash中每個項就是cid
			//value是list,需要把list轉換成jeson資料
			
			jedisClient.hset(REDIS_CONTENT_KEY, cid+"", JsonUtils.objectToJson(list));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return list;
	}
-

【總結】

    通過對redis環境的配置測試以及專案中的運用,讓我深刻的感受到了快取的力量,以及通過這幾技術點開拓的自己的思想,以及考慮問題的角度。

    針對於每一個技術點都應該有它獨特的適應場景,而不是隨意去用,如果是為了學習測試某一個技術點那麼在任何地方進行都是可以的,如果是專案中來運用的話還是要深刻的思考巨集觀的把控,來衡量一下這個技術點的運用場景從而來裁決是否用它。

    有時候小編也會思考,如何才能夠讓自己學習一個東西來達到舉一反三的效果,實踐證明小編的理論就是:首先有一套可執行的理論;其次就是自己要不斷去嘗試,一定要親自動手去做;最後如果在做的過程中遇到各種各樣的問題之後要是再加上:“我又遇到問題了,我又能夠成長了,我又能夠從更多的角度用更多的思路來理解這個知識點了”,這樣的心態的話,那麼學習走想成功也就不太遠啦O(∩_∩)O~

    總結沉潛,繼續前行啦O(∩_∩)O~