轉:
redis設置密碼以及jedisPool設置密碼
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_33355821/article/details/85636756
在百度雲安裝redis服務之后,一直給我發送系統安全警告,推薦我redis設置訪問密碼,於是出於安全考慮我就設置一下redis的密碼
1.修改redis.conf配置文件:
找到requirepass這一行,解注這一行代碼,requirepass后面就是跟的自己的密碼。
2.關閉redis服務,發現報錯:
可以使用下面兩個方法關閉服務:
方式一:通過ps aux|grep redis命令查看redis進程,然后通過kill -9 pid方式殺掉進程
如圖34691就是pid
方式二:用redis-cli客戶端登錄, 然后shutdown 然后exit 就OK了
3.啟動redis服務:
我們用redis.conf配置文件啟動redis服務,然后登錄客戶端,發現這時候需要我們輸入密碼了,說明修改的密碼已經生效了
4.使用密碼連接redis客戶端:
使用./redis-cli -a 密碼 連接客戶端
這時候發現就能連上客戶端了!
5.使用jedispool連接redis服務,首先編寫redis.properties屬性配置文件,將密碼端口等信息填寫進去
-
#ip地址
-
redis.host= 192.168.25.131
-
#端口號
-
redis.port= 6379
-
#如果有密碼
-
redis.password= 123456
-
#客戶端超時時間單位是毫秒 默認是 2000
-
redis.timeout= 3000
-
#數據庫,默認的是 0
-
redis.database= 0
-
#最大空閑數
-
maxIdle= 300
-
#連接池的最大數據庫連接數。設為 0表示無限制,如果是jedis 2.4以后用redis.maxTotal
-
maxActive= 1000
-
#控制一個pool可分配多少個jedis實例,用來替換上面的redis.maxActive,如果是jedis 2.4以后用該屬性
-
maxTotal= 1000
-
#最大建立連接等待時間。如果超過此時間將接到異常。設為- 1表示無限制。
-
maxWait= 1000
-
#在空閑時檢查有效性, 默認 false
-
testOnBorrow= false
-
#連接耗盡是否阻塞, false代表拋異常,true代表阻塞直到超時,默認為true
-
blockWhenExhausted= false
-
-
-
-
#下面的不是必須的配置
-
#連接的最小空閑時間 默認 1800000毫秒(30分鍾)
-
minEvictableIdleTimeMillis= 300000
-
#每次釋放連接的最大數目,默認 3
-
numTestsPerEvictionRun= 1024
-
#逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認- 1
-
timeBetweenEvictionRunsMillis= 30000
-
#是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接並嘗試取出另一個,數據量大的時候建議關閉
-
testWhileIdle= true
6.編寫applicationContext-redis.xml,將jedispool納入spring管理,加載屬性配置文件(外面包一層JedisClientPool只是為了如果使用集群方式的話就不需要改業務代碼了,只需要改配置就行,使用了策略模式)
查看jedisPool的源碼我們發現如果想要設置密碼只有兩種構造方法可以選用,這里我們選擇如下這種構造方法在spring配置文件中進行配置:
-
public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
-
int timeout, final String password, final int database) {
-
this(poolConfig, host, port, timeout, password, database, null);
-
}
由上面的構造方法我們得知如果jedispool使用密碼的話需要配置poolConfig,host,port,timeout,password,database等屬性,我們在spring的xml文件中進行配置,並加載上面第五點已經寫好的配置文件就行了
-
-
<!--連接redis單機版,創建了一個JedisClientPool的bean,創建這個bean需要一個jedisPool屬性,在下面-->
-
<bean class="cn.e3mall.common.jedis.JedisClientPool" id="jedisClientPool">
-
<property name= "jedisPool" ref="jedisPool"></property>
-
</bean>
-
<!--JedisPool這個bean的構造方法需要多個參數-->
-
<bean class="redis.clients.jedis.JedisPool" id="jedisPool" >
-
<constructor-arg name= "host" value="${redis.host}"></constructor-arg>
-
<constructor-arg name= "port" value="${redis.port}"></constructor-arg>
-
<constructor-arg name= "password" value="${redis.password}"></constructor-arg>
-
<constructor-arg name= "timeout" value="${redis.timeout}"></constructor-arg>
-
<constructor-arg name= "database" value="${redis.database}"></constructor-arg>
-
<constructor-arg name= "poolConfig" ref="jedisPoolConfig"></constructor-arg>
-
</bean>
-
<bean class="redis.clients.jedis.JedisPoolConfig" id="jedisPoolConfig">
-
<property name= "maxIdle" value="${maxIdle}" />
-
<property name= "maxTotal" value="${maxActive}" />
-
<property name= "maxWaitMillis" value="${maxWait}" />
-
<property name= "testOnBorrow" value="${testOnBorrow}" />
-
<property name= "blockWhenExhausted" value="${blockWhenExhausted}" />
-
</bean>
7.jedisPool接口以及實現類
下面我們編寫jedispool的接口以及實現類:
接口:
-
package cn.e3mall.common.jedis;
-
-
import java.util.List;
-
-
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);
-
}
實現類:
-
package cn.e3mall.common.jedis;
-
-
import redis.clients.jedis.Jedis;
-
import redis.clients.jedis.JedisPool;
-
-
import java.util.List;
-
-
public class JedisClientPool implements JedisClient {
-
-
private JedisPool jedisPool;
-
-
public JedisPool getJedisPool() {
-
return jedisPool;
-
}
-
-
public void setJedisPool(JedisPool jedisPool) {
-
this.jedisPool = jedisPool;
-
}
-
-
-
public String set(String key, String value) {
-
Jedis jedis = jedisPool.getResource();
-
String result = jedis.set(key, value);
-
jedis.close();
-
return result;
-
}
-
-
-
public String get(String key) {
-
Jedis jedis = jedisPool.getResource();
-
String result = jedis.get(key);
-
jedis.close();
-
return result;
-
}
-
-
-
public Boolean exists(String key) {
-
Jedis jedis = jedisPool.getResource();
-
Boolean result = jedis.exists(key);
-
jedis.close();
-
return result;
-
}
-
-
-
public Long expire(String key, int seconds) {
-
Jedis jedis = jedisPool.getResource();
-
Long result = jedis.expire(key, seconds);
-
jedis.close();
-
return result;
-
}
-
-
-
public Long ttl(String key) {
-
Jedis jedis = jedisPool.getResource();
-
Long result = jedis.ttl(key);
-
jedis.close();
-
return result;
-
}
-
-
-
public Long incr(String key) {
-
Jedis jedis = jedisPool.getResource();
-
Long result = jedis.incr(key);
-
jedis.close();
-
return result;
-
}
-
-
-
public Long hset(String key, String field, String value) {
-
Jedis jedis = jedisPool.getResource();
-
Long result = jedis.hset(key, field, value);
-
jedis.close();
-
return result;
-
}
-
-
-
public String hget(String key, String field) {
-
Jedis jedis = jedisPool.getResource();
-
String result = jedis.hget(key, field);
-
jedis.close();
-
return result;
-
}
-
-
-
public Long hdel(String key, String... field) {
-
Jedis jedis = jedisPool.getResource();
-
Long result = jedis.hdel(key, field);
-
jedis.close();
-
return result;
-
}
-
-
-
public Boolean hexists(String key, String field) {
-
Jedis jedis = jedisPool.getResource();
-
Boolean result = jedis.hexists(key, field);
-
jedis.close();
-
return result;
-
}
-
-
-
public List<String> hvals(String key) {
-
Jedis jedis = jedisPool.getResource();
-
List<String> result = jedis.hvals(key);
-
jedis.close();
-
return result;
-
}
-
-
-
public Long del(String key) {
-
Jedis jedis = jedisPool.getResource();
-
Long result = jedis.del(key);
-
jedis.close();
-
return result;
-
}
-
-
}
8.測試類:
-
package cn.e3mall.jedis;
-
-
import cn.e3mall.common.jedis.JedisClient;
-
import org.junit.Test;
-
import org.springframework.context.ApplicationContext;
-
import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
/**
-
* @author sunqizheng
-
* @Title: TestJedisClient
-
* @ProjectName ttmall
-
* @Description: TODO
-
* @date 2018/9/1917:21
-
*/
-
public class TestJedisClient {
-
-
public void TestJedisClient() throws Exception{
-
//初始化一個spring容器
-
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
-
//從容器中獲得JedisClient對象,(拿到接口的對象)
-
JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
-
jedisClient.set( "mytest","jedisClient1");
-
String string = jedisClient.get( "mytest");
-
System.out.println(string);
-
}
-
}
測試結果:
測試成功