Redis 設置密碼登錄

前言

redis在生產環境中通常都會設置密碼以保證一定的安全性,本篇blog就簡單記錄一下如何在redis中設置客戶端登錄密碼。

修改redis.conf

RT,打開redis.conf文件,搜索requirepass關鍵字,如下圖: 

關注標記的那一行,#requirepass foobared。設置密碼的方法就是去掉註釋的#,把foobared替換成自己的密碼即可,例如將密碼設置爲123456: 

修改完成後重啓redis,再次通過redis客戶端redis-cli登錄並操作可以發現會報一個身份認證錯誤: 

這就說明我們已經成功的設置了密碼,所以通過客戶端連接的話必須加上密碼參數才能正常連接: 

如上圖所示,加了-a參數之後即可正常連接並操作redis。

jedis設置密碼

當我們用Java客戶端連接redis時會遇到同樣的問題,下面看一段簡單的jedis連接redis的測試代碼:

  1. package com.firstelite.test;
  2. import org.junit.Test;
  3.  
  4. import redis.clients.jedis.Jedis;
  5.  
  6. public class Test4Jedis {
  7.  
  8. @Test
  9. public void testTwo() {
  10. Jedis jedis = new Jedis("192.168.145.10");
  11. System.out.println("Connection to server sucessfully");
  12. // 查看服務是否運行
  13. System.out.println("Server is running: " + jedis.ping());
  14. }
  15. }

 

非常簡單,僅僅是測試一下Jedis是否連通redis服務器,運行junit後我們發現報異常了:

  1. redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
  2. at redis.clients.jedis.Protocol.processError(Protocol.java:117)
  3. at redis.clients.jedis.Protocol.process(Protocol.java:142)
  4. at redis.clients.jedis.Protocol.read(Protocol.java:196)
  5. at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:288)
  6. at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:187)
  7. at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:109)
  8. at com.firstelite.test.Test4Jedis.testTwo(Test4Jedis.java:15)
  9. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  10. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  11. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  12. at java.lang.reflect.Method.invoke(Method.java:601)
  13. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
  14. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  15. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
  16. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  17. at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
  18. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
  19. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
  20. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
  21. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
  22. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
  23. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
  24. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
  25. at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
  26. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  27. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  28. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  29. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  30. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  31. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  32.  

顯而易見,由於我們設置了密碼但在這裏又沒有指定密碼,所以報了和剛纔相同的錯誤,那麼如何指定密碼呢?很簡單,Jedis的父類BinaryJedis提供了這樣一樣方法:

  1. public String auth(final String password) {
  2. checkIsInMulti();
  3. client.auth(password);
  4. return client.getStatusCodeReply();
  5. }

 

所以在創建了Jedis的實例後再加上一行jedis.auth("123456"); 即可,最後看一下運行結果: 

spring-data-redis設置密碼

通常情況下在實際的java項目中我們會選擇Spring提供的spring-data-redis來操作redis,spring的封裝可以給我們提供很多便捷之處。那麼spring-data-redis又是如何設置密碼的呢?首先定義一個redis.properties配置文件,定義一組redis屬性供spring加載使用,其中就包含密碼(redis.password):

  1. # Redis settings
  2. redis.host=192.168.145.10
  3. redis.port=6379
  4. redis.password=123456
  5. redis.timeout=100000
  6. redis.maxTotal=300
  7. redis.maxIdle=100
  8. redis.maxWaitMillis=1000
  9. redis.testOnBorrow=true

 

然後在由Spring封裝的JedisConnectionFactory中來設置密碼屬性即可,下面是完整redis配置:

  1. <!-- redis配置 -->
  2. <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
  3. <property name="maxIdle" value="${redis.maxIdle}" />
  4. <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
  5. <property name="testOnBorrow" value="${redis.testOnBorrow}" />
  6. </bean>
  7. <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
  8. p:host-name="${redis.host}" p:port="${redis.port}"
  9. p:password="${redis.password}" p:pool-config-ref="poolConfig" />
  10. <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
  11. <property name="connectionFactory" ref="connectionFactory" />
  12. </bean>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章