您的位置:首页 > 数据库 > Redis

java操作redis(十二)

weixin_43113679 2019-05-17 17:34 56 查看
版权声明:如需转载,请写明出处 https://blog.csdn.net/weixin_43113679/article/details/90297504

java创建Jedis客户端

先把redis-server开启,对应的端口号也要开启,默认6379

  1. 连接本地redis()
Jedis jedis = new Jedis("localhost");

可以直接redis-server就可以,当然这是空的,要想历史数据还需要加载AOF或者RDB
2. 连接另一台电脑的redis

Jedis jedis = new Jedis("ip地址",端口号);

如果启动你会报错,并且报的是连接错误
Connection reset by peer: socket write error
第一先检查自己IP地址写对了吗?
第二再检查自己开redis服务器了吗?
第三是不是直接在cmd.exe上写redis-server,而没有写redis.windows.conf
上面没错误并且你还是新手的话那就应该是没解除保护模式等,

  1. 去掉绑定地址


注释或者删除
  2. 去掉保护模式
 
  2. 如果是Linux还要开放6379端口

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
iptables-save

基本测试

//获得数据
String username = jedis.get("str3");
System.out.println(username);

//存储set数据
jedis.set("add", "背景");
System.out.println(jedis.get("add"));
//获得所有的key给set集合,遍历
Set<String> keys = jedis.keys("*");
for(String s :keys) {
System.out.println("key---"+s+"   value----"+jedis.get(s));
}

这有问题,在这报了一个错误
WRONGTYPE Operation against a key holding the wrong kind of value
是因为有的key不是字符串类型的,
jedis.keys("*"); 这句话把所有的key都找出来了,但是有可能是list(列表)等其他类型
举个例子:

再执行程序就会

因为a不是String对应的存储结构,所以会报错
如果出现这个错误可以把rediis全删除或者找出把那个不是String的删除,这个只是基本测试,所以数据量就一点,以后就尽量不要出现获取所有的key再遍历的程序除非你知道这个key对应的是什么类型的,用那种类型的获取程序获取就没问题了。

使用JedisPoolConfig操作redis

再强调一遍,不要光开启redis-server,这是默认的,java这种用端口的是连接不上的,要在后面加上redis.windows.conf,
当然如果连接的是

Jedis jedis = new Jedis("localhost");

连接可以连接默认的

//0、创建池子的配置对象(现在用这种方式配置参数,下一种方式用redis.properties的方式配置参数)
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(30);//最大闲置个数
poolConfig.setMinIdle(10);//最小闲置个数
poolConfig.setMaxTotal(50);//最大连接数

//1、创建一个redis的连接池
JedisPool pool = new JedisPool(poolConfig, "ip地址", 6379);

//2、从池子中获取redis的连接资源
Jedis jedis = pool.getResource();

//3、操作数据库
jedis.set("555","6666");
System.out.println(jedis.get("555"));

//4、获得数据
String username = jedis.get("str3");
System.out.println(username);
//4、关闭资源
jedis.close();
pool.close();

封装redis配置连接操作redis

redis.properties

redis.url=192.168.43.161  //这个url建议每次用之前查一下,我连的手机的,url会换,
redis.port=6379
redis.pass=
redis.maxIdle=300
redis.minIdle=150
redis.maxTotal=30
redis.maxActive=1024
redis.maxWait=10000
redis.testOnBorrow=true

实现类

public class JedisPoolUtils {

private static JedisPool pool = null;

static{
//初始化
//加载配置文件
InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}

//获得池子对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
}

//获得jedis资源的方法
public static Jedis getJedis(){
return pool.getResource();
}

public static void main(String[] args) {
Jedis jedis = getJedis();
System.out.println(jedis.get("555"));
}
}


很多都实现了,不需要自己去写了方便,Ctrl+右键点击Jedis,在Outline查看

标签: