jedis–java的redis客户端使用

[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);

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注