阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 设置密码登录

104次阅读
没有评论

共计 5024 个字符,预计需要花费 13 分钟才能阅读完成。

前言

redis 在生产环境中通常都会设置密码以保证一定的安全性,本篇文章就简单记录一下如何在 redis 中设置客户端登录密码。

修改 redis.conf

RT,打开 redis.conf 文件,搜索 requirepass 关键字,如下图:
Redis 设置密码登录

关注标记的那一行,#requirepass foobared。设置密码的方法就是去掉注释的 #,把 foobared 替换成自己的密码即可,例如将密码设置为 123456:
Redis 设置密码登录

修改完成后重启 redis,再次通过 redis 客户端 redis-cli 登录并操作可以发现会报一个身份认证错误:
Redis 设置密码登录

这就说明我们已经成功的设置了密码,所以通过客户端连接的话必须加上密码参数才能正常连接:
Redis 设置密码登录

如上图所示,加了 - a 参数之后即可正常连接并操作 redis。

jedis 设置密码

当我们用 Java 客户端连接 redis 时会遇到同样的问题,下面看一段简单的 jedis 连接 redis 的测试代码:

package com.firstelite.test;

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class Test4Jedis {

    @Test
    public void testTwo() {Jedis jedis = new Jedis("192.168.145.10");
        System.out.println("Connection to server sucessfully");
        // 查看服务是否运行
        System.out.println("Server is running:" + jedis.ping());
    }

}

非常简单,仅仅是测试一下 Jedis 是否连通 redis 服务器,运行 junit 后我们发现报异常了:

redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
    at redis.clients.jedis.Protocol.processError(Protocol.java:117)
    at redis.clients.jedis.Protocol.process(Protocol.java:142)
    at redis.clients.jedis.Protocol.read(Protocol.java:196)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:288)
    at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:187)
    at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:109)
    at com.firstelite.test.Test4Jedis.testTwo(Test4Jedis.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

显而易见,由于我们设置了密码但在这里又没有指定密码,所以报了和刚才相同的错误,那么如何指定密码呢?很简单,Jedis 的父类 BinaryJedis 提供了这样一样方法:

  public String auth(final String password) {checkIsInMulti();
    client.auth(password);
    return client.getStatusCodeReply();}

所以在创建了 Jedis 的实例后再加上一行jedis.auth("123456"); 即可,最后看一下运行结果:
Redis 设置密码登录

spring-data-redis 设置密码

通常情况下在实际的 java 项目中我们会选择 Spring 提供的 spring-data-redis 来操作 redis,spring 的封装可以给我们提供很多便捷之处。那么 spring-data-redis 又是如何设置密码的呢?首先定义一个 redis.properties 配置文件,定义一组 redis 属性供 spring 加载使用,其中就包含密码(redis.password):

# Redis settings  
redis.host=192.168.145.10 
redis.port=6379  
redis.password=123456
redis.timeout=100000  
redis.maxTotal=300  
redis.maxIdle=100  
redis.maxWaitMillis=1000  
redis.testOnBorrow=true  

然后在由 Spring 封装的 JedisConnectionFactory 中来设置密码属性即可,下面是完整 redis 配置:

<!-- redis 配置 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.maxIdle}" />
    <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
    <property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
    p:host-name="${redis.host}" p:port="${redis.port}" 
    p:password="${redis.password}" p:pool-config-ref="poolConfig" />
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
</bean>

总结

简单整理一下关于 Redis 设置密码相关的内容,希望对遇到同样问题的朋友有所帮助,The End。

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm

Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis 安装部署学习笔记 http://www.linuxidc.com/Linux/2014-07/104306.htm

Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135557.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5024字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中