redis設置密碼以及jedisPool設置密碼


 

轉:

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屬性配置文件,將密碼端口等信息填寫進去

  1. #ip地址
  2. redis.host= 192.168.25.131
  3. #端口號
  4. redis.port= 6379
  5. #如果有密碼
  6. redis.password= 123456
  7. #客戶端超時時間單位是毫秒 默認是 2000
  8. redis.timeout= 3000
  9. #數據庫,默認的是 0
  10. redis.database= 0
  11. #最大空閑數
  12. maxIdle= 300
  13. #連接池的最大數據庫連接數。設為 0表示無限制,如果是jedis 2.4以后用redis.maxTotal
  14. maxActive= 1000
  15. #控制一個pool可分配多少個jedis實例,用來替換上面的redis.maxActive,如果是jedis 2.4以后用該屬性
  16. maxTotal= 1000
  17. #最大建立連接等待時間。如果超過此時間將接到異常。設為- 1表示無限制。
  18. maxWait= 1000
  19. #在空閑時檢查有效性, 默認 false
  20. testOnBorrow= false
  21. #連接耗盡是否阻塞, false代表拋異常,true代表阻塞直到超時,默認為true
  22. blockWhenExhausted= false
  23.  
  24.  
  25.  
  26. #下面的不是必須的配置
  27. #連接的最小空閑時間 默認 1800000毫秒(30分鍾)
  28. minEvictableIdleTimeMillis= 300000
  29. #每次釋放連接的最大數目,默認 3
  30. numTestsPerEvictionRun= 1024
  31. #逐出掃描的時間間隔(毫秒) 如果為負數,則不運行逐出線程, 默認- 1
  32. timeBetweenEvictionRunsMillis= 30000
  33. #是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接並嘗試取出另一個,數據量大的時候建議關閉
  34. testWhileIdle= true

6.編寫applicationContext-redis.xml,將jedispool納入spring管理,加載屬性配置文件(外面包一層JedisClientPool只是為了如果使用集群方式的話就不需要改業務代碼了,只需要改配置就行,使用了策略模式)

查看jedisPool的源碼我們發現如果想要設置密碼只有兩種構造方法可以選用,這里我們選擇如下這種構造方法在spring配置文件中進行配置:

  1. public JedisPool(final GenericObjectPoolConfig poolConfig, final String host, int port,
  2. int timeout, final String password, final int database) {
  3. this(poolConfig, host, port, timeout, password, database, null);
  4. }

由上面的構造方法我們得知如果jedispool使用密碼的話需要配置poolConfig,host,port,timeout,password,database等屬性,我們在spring的xml文件中進行配置,並加載上面第五點已經寫好的配置文件就行了

  1.  
  2. <!--連接redis單機版,創建了一個JedisClientPool的bean,創建這個bean需要一個jedisPool屬性,在下面-->
  3. <bean class="cn.e3mall.common.jedis.JedisClientPool" id="jedisClientPool">
  4. <property name= "jedisPool" ref="jedisPool"></property>
  5. </bean>
  6. <!--JedisPool這個bean的構造方法需要多個參數-->
  7. <bean class="redis.clients.jedis.JedisPool" id="jedisPool" >
  8. <constructor-arg name= "host" value="${redis.host}"></constructor-arg>
  9. <constructor-arg name= "port" value="${redis.port}"></constructor-arg>
  10. <constructor-arg name= "password" value="${redis.password}"></constructor-arg>
  11. <constructor-arg name= "timeout" value="${redis.timeout}"></constructor-arg>
  12. <constructor-arg name= "database" value="${redis.database}"></constructor-arg>
  13. <constructor-arg name= "poolConfig" ref="jedisPoolConfig"></constructor-arg>
  14. </bean>
  15. <bean class="redis.clients.jedis.JedisPoolConfig" id="jedisPoolConfig">
  16. <property name= "maxIdle" value="${maxIdle}" />
  17. <property name= "maxTotal" value="${maxActive}" />
  18. <property name= "maxWaitMillis" value="${maxWait}" />
  19. <property name= "testOnBorrow" value="${testOnBorrow}" />
  20. <property name= "blockWhenExhausted" value="${blockWhenExhausted}" />
  21. </bean>

7.jedisPool接口以及實現類

下面我們編寫jedispool的接口以及實現類:

接口:

  1. package cn.e3mall.common.jedis;
  2.  
  3. import java.util.List;
  4.  
  5. public interface JedisClient {
  6.  
  7. String set(String key, String value);
  8. String get(String key);
  9. Boolean exists(String key);
  10. Long expire(String key, int seconds);
  11. Long ttl(String key);
  12. Long incr(String key);
  13. Long hset(String key, String field, String value);
  14. String hget(String key, String field);
  15. Long hdel(String key, String... field);
  16. Boolean hexists(String key, String field);
  17. List<String> hvals(String key);
  18. Long del(String key);
  19. }

實現類:

  1. package cn.e3mall.common.jedis;
  2.  
  3. import redis.clients.jedis.Jedis;
  4. import redis.clients.jedis.JedisPool;
  5.  
  6. import java.util.List;
  7.  
  8. public class JedisClientPool implements JedisClient {
  9.  
  10. private JedisPool jedisPool;
  11.  
  12. public JedisPool getJedisPool() {
  13. return jedisPool;
  14. }
  15.  
  16. public void setJedisPool(JedisPool jedisPool) {
  17. this.jedisPool = jedisPool;
  18. }
  19.  
  20. @Override
  21. public String set(String key, String value) {
  22. Jedis jedis = jedisPool.getResource();
  23. String result = jedis.set(key, value);
  24. jedis.close();
  25. return result;
  26. }
  27.  
  28. @Override
  29. public String get(String key) {
  30. Jedis jedis = jedisPool.getResource();
  31. String result = jedis.get(key);
  32. jedis.close();
  33. return result;
  34. }
  35.  
  36. @Override
  37. public Boolean exists(String key) {
  38. Jedis jedis = jedisPool.getResource();
  39. Boolean result = jedis.exists(key);
  40. jedis.close();
  41. return result;
  42. }
  43.  
  44. @Override
  45. public Long expire(String key, int seconds) {
  46. Jedis jedis = jedisPool.getResource();
  47. Long result = jedis.expire(key, seconds);
  48. jedis.close();
  49. return result;
  50. }
  51.  
  52. @Override
  53. public Long ttl(String key) {
  54. Jedis jedis = jedisPool.getResource();
  55. Long result = jedis.ttl(key);
  56. jedis.close();
  57. return result;
  58. }
  59.  
  60. @Override
  61. public Long incr(String key) {
  62. Jedis jedis = jedisPool.getResource();
  63. Long result = jedis.incr(key);
  64. jedis.close();
  65. return result;
  66. }
  67.  
  68. @Override
  69. public Long hset(String key, String field, String value) {
  70. Jedis jedis = jedisPool.getResource();
  71. Long result = jedis.hset(key, field, value);
  72. jedis.close();
  73. return result;
  74. }
  75.  
  76. @Override
  77. public String hget(String key, String field) {
  78. Jedis jedis = jedisPool.getResource();
  79. String result = jedis.hget(key, field);
  80. jedis.close();
  81. return result;
  82. }
  83.  
  84. @Override
  85. public Long hdel(String key, String... field) {
  86. Jedis jedis = jedisPool.getResource();
  87. Long result = jedis.hdel(key, field);
  88. jedis.close();
  89. return result;
  90. }
  91.  
  92. @Override
  93. public Boolean hexists(String key, String field) {
  94. Jedis jedis = jedisPool.getResource();
  95. Boolean result = jedis.hexists(key, field);
  96. jedis.close();
  97. return result;
  98. }
  99.  
  100. @Override
  101. public List<String> hvals(String key) {
  102. Jedis jedis = jedisPool.getResource();
  103. List<String> result = jedis.hvals(key);
  104. jedis.close();
  105. return result;
  106. }
  107.  
  108. @Override
  109. public Long del(String key) {
  110. Jedis jedis = jedisPool.getResource();
  111. Long result = jedis.del(key);
  112. jedis.close();
  113. return result;
  114. }
  115.  
  116. }

8.測試類:

  1. package cn.e3mall.jedis;
  2.  
  3. import cn.e3mall.common.jedis.JedisClient;
  4. import org.junit.Test;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7.  
  8. /**
  9. * @author sunqizheng
  10. * @Title: TestJedisClient
  11. * @ProjectName ttmall
  12. * @Description: TODO
  13. * @date 2018/9/1917:21
  14. */
  15. public class TestJedisClient {
  16. @Test
  17. public void TestJedisClient() throws Exception{
  18. //初始化一個spring容器
  19. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
  20. //從容器中獲得JedisClient對象,(拿到接口的對象)
  21. JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
  22. jedisClient.set( "mytest","jedisClient1");
  23. String string = jedisClient.get( "mytest");
  24. System.out.println(string);
  25. }
  26. }

測試結果:

測試成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM