一、redis的安装
这里演示的版本是Redis4.0.6,Linux系统是CentOS6.7,Jdk1.7,Jedis2.8.1
这是官方文档介绍的安装方式
下载,解压,编译:
$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make
二进制文件是编译完成后在src目录下,通过下面的命令启动Redis服务:
$ src/redis-server
你可以使用内置的客户端命令redis-cli进行使用:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
当然,个人不建议直接使用源码文件中的服务,make编译完成后,可以安装到指定目录:
make PREFIX=/usr/local/redis install
现在去刚刚tar包解压出来的源码目录中,拷贝一个redis.conf配置文件,放到/usr/local/redis/bin/目录下
以后在这个目录下使用就好了
启动服务(暂时不使用自己刚才复制过来的redis.conf配置文件)
./redis-server
服务端启动成功
启动客户端(暂时不设置ip,端口号和密码)
./redis-cli
客户端启动成功
二、Java程序中jedis操作redis
上面的方式只是一种小练习,我们现在通过Java程序用jedis来操作Linux服务器上的redis。
用maven来引入jedis:
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
Java代码:
public static void main(String[] args) {
// 虚拟机设置的ip,redis默认端口号
Jedis jedis = new Jedis("192.168.133.128", 6379);
jedis.set("key01", "zhangsan");
jedis.set("key02", "lisi");
System.out.println(jedis.get("key01"));
}
注意上面的代码是有问题的!
三、redis配置文件
上面的代码运行后,会报错
redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
连接超被拒绝了,这是因为,redis的访问ip默认是127.0.0.1
你需要在自己拷贝的redis.conf配置文件中修改:
文档很长,可以通过"/"命令来查找"bind"字符串,按n搜索下一个
:/bind
把绑定的主机ip添加进去,之后启动redis服务的时候,需要手动加载配置文件
我的配置文件放在了和server服务的同一个目录里,所以启动服务时输入:
./redis-server redis.conf
注意啊:如果不输入后面的配置文件目录,那么该配置文件不起作用,会提示说启动默认的配置文件。
之后再次运行Java代码
又报错!!
redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
这错报的好长。。
好心的博主帮你谷歌翻译了一下。
简单来说呢?就是给你提供了几个解决方案
1)只需禁用保护模式,即可通过从同一主机连接到Redis,从回送接口发送命令“CONFIG SET protected-mode no”正在运行,但是如果您这样做,请勿使用互联网公开访问互联网。使用CONFIG REWRITE使此更改永久。
2)或者,您可以通过编辑Redis配置文件并将protected mode选项设置为“no”来禁用保护模式,然后重新启动服务器。
3)如果您只是为了测试而手动启动服务器,请使用“ --protected-mode no”选项重新启动服务器。
4)设置绑定地址或认证密码。
这是redis4.0版本的新特性,redis3不会报错。
在这里我选择设置redis密码,同样打开redis.conf配置文件,设置密码为123456,保存退出
然后启动服务器
之后你要想在Linux里用命令打开redis客户端,需要输入一些参数
很显然,-h是redis服务绑定的主机ip,-p是redis服务的端口号,-a是redis服务的密码,都可以在redis.conf里更改的
然后就好了
这个时候,Java代码中的问题还没解决完,运行还会报错的,没有访问权限
redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
你还需要在Java代码中增加一条密码设置
public static void main(String[] args) {
// 虚拟机的设置的ip,,redis默认端口号
Jedis jedis = new Jedis("192.168.133.128", 6379);
// redis访问密码
jedis.auth("123456");
jedis.set("key01", "zhangsan");
jedis.set("key02", "lisi");
System.out.println(jedis.get("key01"));
}
OK,运行正常