[toc]
原因
既然学习了redis 和redistemplate ,jedis是为了方便在java中使用redis的一个客户端,用来代替redistemplate的。 个人建议还是不要使用jedis吧
序列化
keySerializer:这个是对key的默认序列化器。默认值是StringSerializer。
valueSerializer:这个是对value的默认序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashKeySerializer:对hash结构数据的hashkey序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
hashValueSerializer:对hash结构数据的hashvalue序列化器,默认值是取自DefaultSerializer的JdkSerializationRedisSerializer。
基本数据使用
基本的redis数据使用,
//simple key-value
jedis.set("redis", "myredis");
System.out.println(jedis.get("redis"));
jedis.append("redis", "yourredis");
jedis.append("mq", "RabbitMQ");
//incr
String pv = jedis.set("pv", "0");
System.out.println("pv:"+pv);
jedis.incr("pv");
jedis.incrBy("pv", 10);
System.out.println("pv:"+pv);
//mset
jedis.mset("firstName", "ricky", "lastName", "Fung");
System.out.println(jedis.mget("firstName", "lastName"));
//map
Map<String,String> cityMap = new HashMap<String,String>();
cityMap.put("beijing", "1");
cityMap.put("shanghai", "2");
jedis.hmset("city", cityMap);
System.out.println(jedis.hget("city", "beijing"));
System.out.println(jedis.hlen("city"));
System.out.println(jedis.hmget("city", "beijing","shanghai"));
//list
jedis.lpush("hobbies", "reading");
jedis.lpush("hobbies", "basketball");
jedis.lpush("hobbies", "shopping");
List<String> hobbies = jedis.lrange("hobbies", 0, -1);
System.out.println("hobbies:"+hobbies);
jedis.del("hobbies");
//set
jedis.sadd("name", "ricky");
jedis.sadd("name", "kings");
jedis.sadd("name", "demon");
System.out.println("size:"+jedis.scard("name"));
System.out.println("exists:"+jedis.sismember("name", "ricky"));
System.out.println(String.format("all members: %s", jedis.smembers("name")));
System.out.println(String.format("rand member: %s", jedis.srandmember("name")));
//remove
jedis.srem("name", "demon");
//hset
jedis.hset("address", "country", "CN");
jedis.hset("address", "province", "BJ");
jedis.hset("address", "city", "Beijing");
jedis.hset("address", "district", "Chaoyang");
System.out.println("city:"+jedis.hget("address", "city"));
System.out.println("keys:"+jedis.hkeys("address"));
System.out.println("values:"+jedis.hvals("address"));
//zadd
jedis.zadd("gift", 0, "car");
jedis.zadd("gift", 0, "bike");
Set<String> gift = jedis.zrange("gift", 0, -1);
System.out.println("gift:"+gift);
对象序列化存储,使用序列化和反序列化即可
Person person = new Person("Ricky", 27);
//序列化
byte[] byteArray = serialize(person);
//set
jedis.set("Ricky".getBytes(), byteArray);
//get
byteArray = jedis.get("Ricky".getBytes());
//反序列化
person = deserialize(byteArray);
高级使用
可以用jedis和redis的连接相互替代,平时互相使用也没有问题
###连接池
Jedis连接池是基于apache-commons pool2实现的。在构建连接池对象的时候,需要提供池对象的配置对象,及JedisPoolConfig(继承自GenericObjectPoolConfig)。我们可以通过这个配置对象对连接池进行相关参数的配置(如最大连接数,最大空数等)。
// 连接池
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(8);
config.setMaxTotal(18);
JedisPool pool = new JedisPool(config, "127.0.0.1", 6379, 2000, "password");
Jedis jedis = pool.getResource();
String value = jedis.get("key");
事务使用
Transaction t = jedis.multi();
t.set("foo", "bar");
// 事务提交
t.exec();
发布与订阅
// 订阅监听
public class Subscriber extends JedisPubSub {
@Override
public void onMessage(String channel, String message) {
super.onMessage(channel, message);
System.out.println(channel + ":" + message);
}
}
//发布
Jedis subscriberJedis = jedisPool.getResource();
Subscriber subscriber2 = new Subscriber();
subscriberJedis.subscribe(subscriber, CHANNEL_NAME);
分布式
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
JedisShardInfo si = new JedisShardInfo("localhost", 6379);
si.setPassword("foobared");
shards.add(si);
si = new JedisShardInfo("localhost", 6380);
si.setPassword("foobared");
shards.add(si);
发表回复