redis设置密码以及jedisPool设置密码

在百度云安装redis服务之后,一直给我发送系统安全警告,推荐我redis设置访问密码,于是出于安全考虑我就设置一下redis的密码

1.修改redis.conf配置文件:

redis设置密码以及jedisPool设置密码_ide

找到requirepass这一行,解注这一行代码,requirepass后面就是跟的自己的密码。

2.关闭redis服务,发现报错:

redis设置密码以及jedisPool设置密码_spring_02

可以使用下面两个方法关闭服务:

方式一:通过ps aux|grep redis命令查看redis进程,然后通过kill -9 pid方式杀掉进程

redis设置密码以及jedisPool设置密码_配置文件_03

如图34691就是pid

方式二:用redis-cli客户端登录, 然后shutdown 然后exit 就OK了

redis设置密码以及jedisPool设置密码_redis_04

3.启动redis服务:

我们用redis.conf配置文件启动redis服务,然后登录客户端,发现这时候需要我们输入密码了,说明修改的密码已经生效了

redis设置密码以及jedisPool设置密码_配置文件_05

4.使用密码连接redis客户端:

使用./redis-cli -a 密码 连接客户端

redis设置密码以及jedisPool设置密码_客户端_06

这时候发现就能连上客户端了!

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. #连接的最小空闲时间 默认1800000毫秒(30分钟)
  25. minEvictableIdleTimeMillis=300000
  26. #每次释放连接的最大数目,默认3
  27. numTestsPerEvictionRun=1024
  28. #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
  29. timeBetweenEvictionRunsMillis=30000
  30. #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个,数据量大的时候建议关闭
  31. 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. <!--连接redis单机版,创建了一个JedisClientPool的bean,创建这个bean需要一个jedisPool属性,在下面-->
  2. <bean class="cn.e3mall.common.jedis.JedisClientPool" id="jedisClientPool">
  3. <property name="jedisPool" ref="jedisPool"></property>
  4. </bean>
  5. <!--JedisPool这个bean的构造方法需要多个参数-->
  6. <bean class="redis.clients.jedis.JedisPool" id="jedisPool" >
  7. <constructor-arg name="host" value="${redis.host}"></constructor-arg>
  8. <constructor-arg name="port" value="${redis.port}"></constructor-arg>
  9. <constructor-arg name="password" value="${redis.password}"></constructor-arg>
  10. <constructor-arg name="timeout" value="${redis.timeout}"></constructor-arg>
  11. <constructor-arg name="database" value="${redis.database}"></constructor-arg>
  12. <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
  13. </bean>
  14. <bean class="redis.clients.jedis.JedisPoolConfig" id="jedisPoolConfig">
  15. <property name="maxIdle" value="${maxIdle}" />
  16. <property name="maxTotal" value="${maxActive}" />
  17. <property name="maxWaitMillis" value="${maxWait}" />
  18. <property name="testOnBorrow" value="${testOnBorrow}" />
  19. <property name="blockWhenExhausted" value="${blockWhenExhausted}" />
  20. </bean>

7.jedisPool接口以及实现类

下面我们编写jedispool的接口以及实现类:

接口:


  1. package cn.e3mall.common.jedis;

  2. import java.util.List;

  3. public interface JedisClient {

  4. String set(String key, String value);
  5. String get(String key);
  6. Boolean exists(String key);
  7. Long expire(String key, int seconds);
  8. Long ttl(String key);
  9. Long incr(String key);
  10. Long hset(String key, String field, String value);
  11. String hget(String key, String field);
  12. Long hdel(String key, String... field);
  13. Boolean hexists(String key, String field);
  14. List<String> hvals(String key);
  15. Long del(String key);
  16. }

实现类:


  1. package cn.e3mall.common.jedis;

  2. import redis.clients.jedis.Jedis;
  3. import redis.clients.jedis.JedisPool;

  4. import java.util.List;

  5. public class JedisClientPool implements JedisClient {

  6. private JedisPool jedisPool;

  7. public JedisPool getJedisPool() {
  8. return jedisPool;
  9. }

  10. public void setJedisPool(JedisPool jedisPool) {
  11. this.jedisPool = jedisPool;
  12. }

  13. @Override
  14. public String set(String key, String value) {
  15. Jedis jedis = jedisPool.getResource();
  16. String result = jedis.set(key, value);
  17. jedis.close();
  18. return result;
  19. }

  20. @Override
  21. public String get(String key) {
  22. Jedis jedis = jedisPool.getResource();
  23. String result = jedis.get(key);
  24. jedis.close();
  25. return result;
  26. }

  27. @Override
  28. public Boolean exists(String key) {
  29. Jedis jedis = jedisPool.getResource();
  30. Boolean result = jedis.exists(key);
  31. jedis.close();
  32. return result;
  33. }

  34. @Override
  35. public Long expire(String key, int seconds) {
  36. Jedis jedis = jedisPool.getResource();
  37. Long result = jedis.expire(key, seconds);
  38. jedis.close();
  39. return result;
  40. }

  41. @Override
  42. public Long ttl(String key) {
  43. Jedis jedis = jedisPool.getResource();
  44. Long result = jedis.ttl(key);
  45. jedis.close();
  46. return result;
  47. }

  48. @Override
  49. public Long incr(String key) {
  50. Jedis jedis = jedisPool.getResource();
  51. Long result = jedis.incr(key);
  52. jedis.close();
  53. return result;
  54. }

  55. @Override
  56. public Long hset(String key, String field, String value) {
  57. Jedis jedis = jedisPool.getResource();
  58. Long result = jedis.hset(key, field, value);
  59. jedis.close();
  60. return result;
  61. }

  62. @Override
  63. public String hget(String key, String field) {
  64. Jedis jedis = jedisPool.getResource();
  65. String result = jedis.hget(key, field);
  66. jedis.close();
  67. return result;
  68. }

  69. @Override
  70. public Long hdel(String key, String... field) {
  71. Jedis jedis = jedisPool.getResource();
  72. Long result = jedis.hdel(key, field);
  73. jedis.close();
  74. return result;
  75. }

  76. @Override
  77. public Boolean hexists(String key, String field) {
  78. Jedis jedis = jedisPool.getResource();
  79. Boolean result = jedis.hexists(key, field);
  80. jedis.close();
  81. return result;
  82. }

  83. @Override
  84. public List<String> hvals(String key) {
  85. Jedis jedis = jedisPool.getResource();
  86. List<String> result = jedis.hvals(key);
  87. jedis.close();
  88. return result;
  89. }

  90. @Override
  91. public Long del(String key) {
  92. Jedis jedis = jedisPool.getResource();
  93. Long result = jedis.del(key);
  94. jedis.close();
  95. return result;
  96. }

  97. }

8.测试类:


  1. package cn.e3mall.jedis;

  2. import cn.e3mall.common.jedis.JedisClient;
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;

  6. /**
  7. * @author sunqizheng
  8. * @Title: TestJedisClient
  9. * @ProjectName ttmall
  10. * @Description: TODO
  11. * @date 2018/9/1917:21
  12. */
  13. public class TestJedisClient {
  14. @Test
  15. public void TestJedisClient() throws Exception{
  16. //初始化一个spring容器
  17. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
  18. //从容器中获得JedisClient对象,(拿到接口的对象)
  19. JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
  20. jedisClient.set("mytest","jedisClient1");
  21. String string = jedisClient.get("mytest");
  22. System.out.println(string);
  23. }
  24. }

测试结果:

redis设置密码以及jedisPool设置密码_redis_07

测试成功