在百度雲安裝redis服務以後,一直給我發送系統安全警告,推薦我redis設置訪問密碼,因而出於安全考慮我就設置一下redis的密碼java
1.修改redis.conf配置文件:redis
找到requirepass這一行,解注這一行代碼,requirepass後面就是跟的本身的密碼。spring
2.關閉redis服務,發現報錯:數據庫
可使用下面兩個方法關閉服務:安全
方式一:經過ps aux|grep redis命令查看redis進程,而後經過kill -9 pid方式殺掉進程app
如圖34691就是pidide
方式二:用redis-cli客戶端登陸, 而後shutdown 而後exit 就OK了測試
3.啓動redis服務:
咱們用redis.conf配置文件啓動redis服務,而後登陸客戶端,發現這時候須要咱們輸入密碼了,說明修改的密碼已經生效了大數據
4.使用密碼鏈接redis客戶端:
使用./redis-cli -a 密碼 鏈接客戶端ui
這時候發現就能連上客戶端了!
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;
}
@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;
}
}
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 {
@Test
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);
}
}
測試結果:
測試成功