转:
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);
-
}
-
}
测试结果:
测试成功