使用jedis连接Redis
第一步:创建一个java工程
第二步:把jedis依赖的jar包导入工程。如果maven工程,添加jedis的坐标。
<dependencies> <!-- Jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version> </dependency> </dependencies>
第三步:创建一个Jedis对象。构造方法中指定一个host、一个port两个参数。
第四步:调用redis的命令。每个redis命令在jedis中都对应一个方法。
第五步:关闭Jedis。
public class HelloJedis { public static void main(String[] args) { //实例化一个jedis对象,连接到指定的服务器,指定连接端口号 Jedis jedis = new Jedis("192.168.199.130",6379); //redis密码 jedis.auth("test"); //将key为message的信息写入redis数据库中 jedis.set("message", "Hello Redis!"); //从数据库中取出key为message的数据 String value = jedis.get("message"); System.out.println(value); //关闭连接 jedis.close(); } }
使用连接池
第一步:创建一个连接池对象,需要指定服务的ip及端口号。
第二步:从连接池中获得jedis对象。
第三步:使用jedis对象操作redis。
第四步:关闭jedis对象。
第五步:关闭连接池。
连接池是单例、jedis是多例的。
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class Snippet { public void testJedisPool() throws Exception { //创建连接池对象 JedisPool jedisPool = new JedisPool("192.168.25.153", 6379); //从连接池获得连接 Jedis jedis = jedisPool.getResource(); //操作redis数据库 String result = jedis.get("jedis-test"); System.out.println(result); //关闭jedis对象 jedis.close(); //关闭连接池 jedisPool.close(); } }
连接redis集群
第一步:创建一个JedisCluster对象,此对象在系统中单例。构造方法需要指定所有节点的ip及端口。
第二步:直接使用JedisCluster操作redis。
第三步:程序结束时关闭JedisCluster。
import java.io.IOException; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; public class ClusterJedis { public static void main(String[] args) throws IOException { //用于存放redis服务器端点集合,可以被使用redis服务器地址与端口 Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); //向集合中添加一个redis服务器端点 jedisClusterNodes.add(new HostAndPort("192.168.199.130", 6379)); //创建redis集群对象 JedisCluster jc = new JedisCluster(jedisClusterNodes); //在集群对象中添加数据 jc.set("foo", "bar"); //获取数据 String value = jc.get("foo"); String message = jc.get("message"); System.out.println(value+","+message); //关闭 jc.close(); } }
实现 java连接redis遇到的问题
- 问题:java连接redis出错
可能原因:Redis的配置文件redis.conf里使用了 bind localhost 或者 bind 127.0.0.1
band localhost 只能本机访问,局域网内计算机不能访问
bind 局域网IP 只能局域网内IP的机器访问, 本地localhost都无法访问.
解决方法:注释掉bind 的代码 如:#bind localhost
- 问题:java连接redis错误
可能原因:redis默认使用的 6379 端口 未开放
解决方法:配置linux,允许访问6379端口,命令:iptables -A INPUT -p tcp –dport 6379 -j ACCEPT
- 问题:java连接redis出错,错误信息如下:
DENIED Redis is running in protected mode because protected mode is enabled…
原因:redis目前处于受保护模式,不允许非本地客户端链接,我们可以通过给redis设置密码,然后客户端链接的时候,写上密码就可以解决了
解决方法:修改redis.conf文件配置
使用命令 :/ requirepass 快速查找到 # requirepass foobared 然后去掉注释,这个foobared改为自己的密码。然后wq保存。
service redis restart 这个时候尝试登录redis,发现可以登上,但是执行具体命令是提示操作不允许
尝试用密码登录并执行具体的命令看到可以成功执行
Redis防火墙,开放redis端口
#关闭防火墙
Service iptables stop
vi /etc/sysconfig/iptables
#添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
#重启防火墙
service iptables restart