java 连 redis bind 127.0.0.1一定要改bind吗

Redis 2.8 配置文件说明 | Dumbee
WP-Cumulus by
9 or better.
最近访客功能java 连接Redis及demo-爱编程
java 连接Redis及demo
java连接linux Redis遇到的问题
   昨天在Linux搭建了Redis服务,今天使用java连接测试了一下。要想使用java连接redis服务,就离不开jedis-2.6.1.jar。使用jedis连接redis十分方便。下面我们测试一下是否连接上redis服务:
package com.coinvs.redis.util;import redis.clients.jedis.Jedis;//import redis.clients.jedis.Jpublic class RadisDemo { & & & public static void main(String[] args) {    //连接本地的 Redis 服务    Jedis jedis = new Jedis("192.168.1.66",6379);    System.out.println("Connection to server sucessfully");    //查看服务是否运行    System.out.println("Server is running: "+jedis.ping()); & &}}
如果出现下图,这说明没有连接成功,不过不用担心,这很好解决。
连接redis失败
出现这种错误的原因有以下几种:
redis服务没有开启;
没有正确输入,ip、端口;
Linux系统防火墙没有关闭;
防火墙关闭了,但是访问者ip,在redis.conf文件的bind之外。
简单设置一下,应该就可以连接上了!
下面我们简单说一下,jedis API的使用:
  1.redis存储字符串
// & @Test & &public void testString() { & & & &//-----添加数据---------- & & & &jedis.set("name","往往");//向key--&name中放入了value--xinxin & & & &System.out.println(jedis.get("name"));//执行结果:xinxin & & & &jedis.append("name", " is my lover"); //拼接 & & & &System.out.println(jedis.get("name")); & & & &jedis.del("name"); &//删除某个键 & & & &System.out.println(jedis.get("name")); & & & &//设置多个键值对 & & & &jedis.mset("name","liuling","age","23","qq","476777XXX"); & & & &System.out.println(jedis.get("age")); & & & &jedis.incr("age"); //进行加1操作 & & & &System.out.println(jedis.get("age")); & & & &System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq")); & &}
  2.redis操作Map
// & &@Test & &public void testMap() { & & & &//-----添加数据---------- & & & &Map&String, String& map = new HashMap&String, String&(); & & & &map.put("name", "xinxin"); & & & &map.put("age", "22"); & & & &map.put("qq", "123456"); & & & &jedis.hmset("user",map); & & & &//取出user中的name,执行结果:[minxr]--&注意结果是一个泛型的List & & & &//第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数 & & & &List&String& rsmap = jedis.hmget("user", "name", "age", "qq"); & & & &System.out.println(rsmap); & & & &//删除map中的某个键值 & & & &jedis.hdel("user","age"); & & & &System.out.println(jedis.hmget("user", "age")); //因为删除了,所以返回的是null & & & &System.out.println(jedis.hlen("user")); //返回key为user的键中存放的值的个数2 & & & &System.out.println(jedis.exists("user"));//是否存在key为user的记录 返回true & & & &System.out.println(jedis.hkeys("user"));//返回map对象中的所有key & & & &System.out.println(jedis.hvals("user"));//返回map对象中的所有value & & & &Iterator&String& iter=jedis.hkeys("user").iterator(); & & & &while (iter.hasNext()){ & & & & & &String key = iter.next(); & & & & & &System.out.println(key+":"+jedis.hmget("user",key)); & & & &} & &}
  3.jedis操作List
// & &@Test & &public void testList(){ & & & &//开始前,先移除所有的内容 & & & &jedis.del("java framework"); & & & &System.out.println(jedis.lrange("java framework",0,-1)); & & & &//先向key java framework中存放三条数据 & & & &jedis.lpush("java framework","spring"); & & & &jedis.lpush("java framework","struts"); & & & &jedis.lpush("java framework","hibernate"); & & & &//再取出所有数据jedis.lrange是按范围取出, & & & &// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有 & & & &System.out.println(jedis.lrange("java framework",0,-1)); & & & &jedis.del("java framework"); & & & &jedis.rpush("java framework","spring"); & & & &jedis.rpush("java framework","struts"); & & & &jedis.rpush("java framework","hibernate"); & & & &System.out.println(jedis.lrange("java framework",0,-1)); & &}
  4. jedis操作Set
// & &@Test & &public void testSet(){ & & & &jedis.del("user"); & & & &//添加 & & & &jedis.sadd("user","liuling"); & & & &jedis.sadd("user","xinxin"); & & & &jedis.sadd("user","ling"); & & & &jedis.sadd("user","zhangxinxin"); & & & &jedis.sadd("user","who"); & & & &//移除noname & & & &jedis.srem("user","who"); & & & &System.out.println(jedis.smembers("user"));//获取所有加入的value & & & &System.out.println(jedis.sismember("user", "xinxin"));//判断 who 是否是user集合的元素 & & & &System.out.println(jedis.srandmember("user")); //随机返回一个user中元素的value & & & &System.out.println(jedis.scard("user"));//返回集合的元素个数 & &}&
5.jedis 排序
@Test & &public void test() throws InterruptedException { & & & &// & & & &//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的) & & & &jedis.del("a");//先清除数据,再加入数据进行测试 & & & &jedis.rpush("a", "1"); & & & &jedis.lpush("a","6"); & & & &jedis.lpush("a","3"); & & & &jedis.lpush("a","9"); & & & &System.out.println(jedis.lrange("a",0,-1));// [9, 3, 6, 1] & & & &System.out.println(jedis.sort("a")); //[1, 3, 6, 9] &//输入排序后结果 & & & &System.out.println(jedis.lrange("a",0,-1)); & &}
简单的学习一下jedis的API,后续还会补充!
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。当前位置: >
Java Spring mvc 操作 Redis 及 Redis 集群,mvcredis(3)
时间: 15:53 来源:网络整理 作者:安卓自学网 阅读:次
poolConfig 即配置 redis 连接池,之后配置了两个 JedisConnectionFactory 和 RedisTemplate ,一个 RedisTemplate 对应一个 JedisConnectionFactory ,这样可以配置根据场景配置不同的 Redis 连接,比如超时时间要求不一致、database 0-15 可以存储不同的数据等。这里就配置了database 1 和 2 ,调用 commonRedisTemplate 会存到 database1 ,调用 cacheRedisTemplate 会存到 database2。
之后在 Service 层即可注入并引用这两个 RedisTemplate ,如下代码:
import mons.lang3.StringU
import org.springframework.dao.DataAccessE
import org.springframework.data.redis.connection.RedisC
import org.springframework.data.redis.core.RedisC
import org.springframework.data.redis.core.RedisT
import org.springframework.stereotype.R
import javax.annotation.R
import java.io.*;
@Repository
public class RedisCache {  
@Resource(name = "cacheRedisTemplate")
private RedisTemplate&String, String& cacheRedisT
public void put(Object key, Object value) {
if(null == value) {
if(value instanceof String) {
if(StringUtils.isEmpty(value.toString())) {
// TODO Auto-generated method stub
final String keyf = key + "";
final Object valuef =
final long liveTime = 86400;
cacheRedisTemplate.execute(new RedisCallback&Long&() {
public Long doInRedis(RedisConnection connection)
throws DataAccessException {
byte[] keyb = keyf.getBytes();
byte[] valueb = toByteArray(valuef);
connection.set(keyb, valueb);
if (liveTime & 0) {
connection.expire(keyb, liveTime);
return 1L;
public Object get(Object key) {
final String keyf = (String)
object = cacheRedisTemplate.execute(new RedisCallback&Object&() {
public Object doInRedis(RedisConnection connection)
throws DataAccessException {
byte[] key = keyf.getBytes();
byte[] value = connection.get(key);
if (value == null) {
return toObject(value);
* 描述 : &byte[]转Object&. &br&
* &使用方法说明&
* @param bytes
private Object toObject(byte[] bytes) {
Object obj =
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
ois.close();
bis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
private byte[] toByteArray(Object obj) {
byte[] bytes =
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
bytes = bos.toByteArray();
oos.close();
bos.close();
} catch (IOException ex) {
ex.printStackTrace();
最后在 Controller 中调用即可
@Autowired
private RedisCache redisC
@RequestMapping(value = "get", method = RequestMethod.GET)
@ResponseBody
public Object getByMyService(String key) {
String result = redisService.get(key);
} catch (Exception e) {
e.printStackTrace();
@RequestMapping(value = "save", method = RequestMethod.GET)
@ResponseBody
public Object save() {
Token token = new Token();
token.setAccess_token("token");
token.setExpires_in(1000);
redisCache.put("token", token);
} catch (Exception e) {
e.printStackTrace();
return "ok";
操作 Redis 集群
只用 Jedis 自己实现注入(区别于下面的引用spring-data-redis)
把前面的 JedisClusterClient 代码拿过来引用即可,只需实现一个访问 Redis 的 Service ,就可以集成到 Spring mvc 。Service 代码如下:
import org.springframework.stereotype.S
import util.JedisClusterC
* Created by fengdezitai on .
public class RedisClusterService {
public void save() throws Exception{
//调用 JedisClusterClient 中的方法
JedisClusterClient jedisClusterClient = JedisClusterClient.getInstance();
jedisClusterClient.SaveRedisCluster();
}catch (Exception e){
(责任编辑:)Redis(1)
Redis是目前十分流行的key-value类型存储系统,因为其高效的性能,主从同步的架构,丰富的存储方式以及极其简便的操作备受开发者青睐的一款工具。为了保证效率,数据都是缓存在内存中,redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis同时提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
上一篇文章中我们中我们在Linux机器上安装了Redis的server端,在本篇文章中我们将在Windows开发环境中使用java作为Client端远程连接并操作Redis。
1.已装好Redis的Linux服务器(Redis 3.2.6)
2.Jedis-2.9.0.jar(java-client端有很多,这里我们推荐官方的Jedis,2.9.0是最新版)
3.Eclipse开发环境(可以自己选择,不多做说明)
1.首先在server端启动redis,启动命令是:(详情请看安装篇)
./redis-server redis.conf
2.java建立project,因为jedis包是jdk 1.7编译的,请使用1.7或以上版本的jre环境
测试代码如下
import redis.clients.jedis.J
public class Test {
public static void main(String[] args) {
public static void init(){
Jedis jedis = new Jedis("192.168.201.142");
jedis.put("myredis","ok");
System.out.println(jedis.get("myredis"));
若是成功的话,控制台会输出ok的结果,若是报错,请看下面依照实际情况处理。
1.connection refused:connect的异常
报错信息如下:
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
at redis.clients.jedis.Connection.connect(Connection.java:207)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)
at redis.clients.jedis.Connection.sendCommand(Connection.java:126)
at redis.clients.jedis.BinaryClient.set(BinaryClient.java:110)
at redis.clients.jedis.Client.set(Client.java:47)
at redis.clients.jedis.Jedis.set(Jedis.java:120)
at roy.redis.test.Test.init(Test.java:13)
at roy.redis.test.Test.main(Test.java:8)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at redis.clients.jedis.Connection.connect(Connection.java:184)
... 7 more
这可能是两个原因造成的,首先可能是redis的6379端口无法访问,清先在cmd中输入命令
telnet 192.168.201.42 6379
看看可不可以访问redis-server机器的6379端口,如果不能访问,需要在远程机器关掉防火墙或者添加允许通过
1)使用root用户登录,vi
/etc/sysconfig/iptables,添加如图所以一行
2)输入命令service iptables restart重启防火墙
或者可以直接root用户使用命令service iptables stop关闭防火墙。
防火墙检查完后,如果还是出现上述问题,说明redis还有地方需要配置,redis默认是只有本机可以访问的,想要远程访问需要修改redis.conf配置文件。
进入redis.conf目录,并使用vi命令打开,找到bind那行修改后,wq保存退出,重启redis-server。
bind 后加的是允许访问的ip
bind 127.0.0.1代表只有本机可以访问,可以将允许访问的ip加入,也可以直接注释掉这一行,这样所有机器都可以访问。
2.DENIED Redis is running in protected mode
报错信息如下:
Exception in thread "main" 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.
at redis.clients.jedis.Protocol.processError(Protocol.java:127)
at redis.clients.jedis.Protocol.process(Protocol.java:161)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:239)
at redis.clients.jedis.Jedis.set(Jedis.java:121)
at roy.redis.test.Test.init(Test.java:13)
at roy.redis.test.Test.main(Test.java:8)
报错信息很长,但是主要是说redis开启了protected mode,这也是Redis3.2加入的新特性,开启保护模式的redis只允许本机登录,同样设置在配置文件redis.conf中,如图
这里原来是yes代表开启了保护模式,后面可以填密码也可以填no代表关闭,我们这里选择关闭保护模式,wq保存退出后再重启redis-server
此时应该就可以成功操作了,谢谢观看本文,希望能帮到你。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:46436次
排名:千里之外
原创:24篇
(4)(4)(1)(2)(1)(4)(1)(1)(1)(1)(2)(1)(1)(1)}

我要回帖

更多关于 redis bind ip段 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信