redis單機版安裝+測試+專案運用
阿新 • • 發佈:2018-12-25
【簡介】
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~