《商城專案04》--Redis快取的應用
一, redis的下載安裝配置
1, 下載
貼個連結供參考使用: redis-3.0.0.tar.gz
2, 安裝
<前提是有已安裝Linux虛擬機器可使用>
2.1 安裝gcc編譯器
yum install gcc-c++
2.2 解壓redis
tar -zxvf redis-3.0.0.tar.gz
2.3 編譯
cd redis-3.0.0 --> make指令 進行編譯!
2.4 安裝
make install PREFIX=/usr/local/redis
3, 啟動redis服務
3.1 前端啟動
cd /usr/local/redis/bin/ --> ./redis-server
3.2 後端啟動
修改配置檔案
cd /usr/local/redis/bin/redis.conf (從安裝目錄usr/redis/redis-3.0.0/redis.conf複製過來)
--> (daemonize對應的no改成yes)
--> 指令 ./redis-server redis.conf(後臺啟動)
3.3 檢視是否啟動
ps aux|grep redis
root 9389 0.1 0.7 140848 7452 ? Ssl 16:00 0:00 ./redis-server *:6379
root 9429 0.0 0.0 112676 968 pts/0 R+ 16:01 0:00 grep --color=auto redis
3.4 關閉服務
3.4.1 Kill 9389 <程序號, 不是埠號>
3.4.2 ./redis-cli shutdown <通過客戶端關閉>
3.5 啟動redis客戶端, 連線服務
./redis-cli -h 192.168.25.133 -p 6379
二, redis的常用語法
1, 先進入redis
1.1 先進入bin目錄 cd /usr/local/redis/bin/
1.2 然後啟動客戶端 ./redis-cli
1.3 測試是否啟動成功
輸入指令ping, 若響應PONG則表示啟動成功,可以進行相關命令操作;
2, 五種資料型別
2.1 String型別
set str1 abc -->宣告一字串str1 值為abc
get str1 -->取出變數str1
Keys * -->取出所有的key值
Incr key1 -->給變數key1 +1
Decr key1 -->給變數key1 -1
Del key2 -->刪除變數key2
2.2 hash型別
hset hash1 filed1 1 -->給hash1裡的filed1賦值為1
hget hash1 filed1 -->取出hash1裡的filed1
hkeys hash1 -->查詢hash1裡的所有key值
hvals hash1 -->查詢hash1裡的所有value值
hgetall hash1 -->查詢hash1裡的所有key-value;
kdel hash1 filed1 --> 刪除hash1裡的filed1;
2.3 List型別<有序可重複>
lpush list1 a b c d -->從左新增元素
lrange list1 0 -1 -->從左查詢所有資料
rpush list1 1 2 3 4 -->從右...
lrange list1 0 -1 -->從右查詢所有資料
Lpop list1 取左起第一個元素
Rpop list1 取右起第一個元素
2.4 Set型別<無序不可重複>
2.5 SortedSet型別<有序不可重複>
## 資料設定過期時間, 以及資料持久化處理
Expire key second:設定key的過期時間
Ttl key:檢視key的有效期
Persist key:清除key的過期時間。Key持久化。
3, redis叢集的搭建
略繁瑣, 此處省略300字
三, redis在java專案中的實際應用
1, 寫測試類簡單測下
1.1 導包, pom.xml中新增依賴
<!-- Redis客戶端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
1.2 寫測試方法
@Test
public void testJedis() throws Exception {
// 第一步:建立一個Jedis物件。需要指定服務端的ip及埠。
Jedis jedis = new Jedis("192.168.25.133", 6379);
//Jedis jedis = new Jedis("192.168.1.103", 8082);
// 第二步:使用Jedis物件操作資料庫,每個redis命令對應一個方法。
jedis.set("hello", "this is shanghai!");
String result = jedis.get("hello");
// 第三步:列印結果。
System.out.println(result);
// 第四步:關閉Jedis
jedis.close();
}
執行能正常打印出結果, 則ok
1.3 在專案中的實際應用
1.3.1 配置Spring-redis.xml
1.3.2 呼叫對應的redis-Bean
呼叫邏輯大概就是:
第一步: 注入JedisClient
第二步: 根據key查redis中是否存有對應的value值, 存在即返回, 不存在再去查詢資料庫, 這裡起到緩解資料庫壓力的作用, 一般需要將經常被訪問的一些資料同步到redis快取中。
下面是封裝的redis相關呼叫類
public interface JedisClient {
String set(String key, String value);
String get(String key);
Boolean exists(String key);
Long expire(String key, int seconds);
Long ttl(String key);
Long incr(String key);
Long hset(String key, String field, String value);
String hget(String key, String field);
Long hdel(String key, String... field);
Boolean hexists(String key, String field);
List<String> hvals(String key);
Long del(String key);
}
public class JedisClientPool implements JedisClient {
@Autowired
private JedisPool jedisPool;
//構建bean額外新增的; by xiangyoulu 2018/3/18 ;
// public JedisClientPool(JedisPool jedisPool) {
// this.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 Boolean exists(String key) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.exists(key);
jedis.close();
return result;
}
@Override
public Long expire(String key, int seconds) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, seconds);
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 incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
@Override
public Long hset(String key, String field, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
}
@Override
public String hget(String key, String field) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, field);
jedis.close();
return result;
}
@Override
public Long hdel(String key, String... field) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key, field);
jedis.close();
return result;
}
@Override
public Boolean hexists(String key, String field) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.hexists(key, field);
jedis.close();
return result;
}
@Override
public List<String> hvals(String key) {
Jedis jedis = jedisPool.getResource();
List<String> result = jedis.hvals(key);
jedis.close();
return result;
}
@Override
public Long del(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(key);
jedis.close();
return result;
}
}
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 Boolean exists(String key) {
return jedisCluster.exists(key);
}
@Override
public Long expire(String key, int seconds) {
return jedisCluster.expire(key, seconds);
}
@Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
}
@Override
public Long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public Long hset(String key, String field, String value) {
return jedisCluster.hset(key, field, value);
}
@Override
public String hget(String key, String field) {
return jedisCluster.hget(key, field);
}
@Override
public Long hdel(String key, String... field) {
return jedisCluster.hdel(key, field);
}
@Override
public Boolean hexists(String key, String field) {
return jedisCluster.hexists(key, field);
}
@Override
public List<String> hvals(String key) {
return jedisCluster.hvals(key);
}
@Override
public Long del(String key) {
return jedisCluster.del(key);
}
}
ok, 是有點略繁瑣。。。