• [redis] redis 存取键值对常用的三种使用方式


    |-Jedis 普通方式

    |-JedisPool 连接池方式(需要引入pool相关jar)

    |-Jedis 分布式 (需要引入pool相关jar)

    引入jedis2.7.0和commons.pool2的相关jar包

    Jedis简单实例

    只要new一个Jedis对象,就能做redis相关操作了。

    import java.util.ArrayList;  
    import java.util.HashMap;  
    import java.util.Iterator;  
    import java.util.List;  
    import java.util.Map;  
    import java.util.Set;                                
    import redis.clients.jedis.Jedis;  
                                                                     
    public class JedisDemo {  
                                                                     
      public void test(){  
         
        Jedis redis
    = new Jedis ("172.0.0.1",6379);//连接redis     redis.auth("redis");//验证密码,如果需要验证的话    
        //
    SET key value将字符串值value关联到key。     redis.set("name", "wangjun1");     redis.set("id", "123456");     redis.set("address", "guangzhou");     //SETEX key seconds value将值value关联到key,并将key的生存时间设为seconds(以秒为单位)。     redis.setex("foo", 5, "haha");     //MSET key value [key value ...]同时设置一个或多个key-value对。     redis.mset("haha","111","xixi","222");     //redis.flushAll();清空所有的key
        System.out.println(redis.dbSize());//dbSize是多少个key的个数     //APPEND key value如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。     redis.append("foo", "00");//如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。     //GET key 返回key所关联的字符串值     redis.get("foo");     //MGET key [key ...] 返回所有(一个或多个)给定key的值     List list = redis.mget("haha","xixi");     for(int i=0;i<list.size();i++){       System.out.println(list.get(i));     }   }
      public static void main(String[] args) {     JedisDemo t1 = new JedisDemo();     t1.test();   }
    }

    JedisPool

    Jedis 使用 commons-pool 完成池化实现。

    1、 配置文件(properties文件):

    #最大分配的对象数
    redis.pool.maxActive=1024
    #最大能够保持idel状态的对象数
    redis.pool.maxIdle=200
    #当池内没有返回对象时,最大等待时间
    redis.pool.maxWait=1000
    #当调用borrow Object方法时,是否进行有效性检查
    redis.pool.testOnBorrow=true
    #当调用return Object方法时,是否进行有效性检查
    redis.pool.testOnReturn=true
    #IP
    redis.ip=172.0.0.1
    #Port
    redis.port=6379

    2、在静态代码段中完成初始化:得到 pool 

    private static JedisPool pool;
    static {
        ResourceBundle bundle = ResourceBundle.getBundle("redis");
        if (bundle == null) {
        throw new IllegalArgumentException("[redis.properties] is not found!");
        }
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));
        config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
        config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
        config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
        config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));
        pool = new JedisPool(config, bundle.getString("redis.ip"),Integer.valueOf(bundle.getString("redis.port")));
    }

    3、Jedis这时候需要从pool中获得

    // 从池中获取一个Jedis对象
    Jedis jedis = pool.getResource();
    String keys = "name";
    // 删数据
    jedis.del(keys);
    // 存数据
    jedis.set(keys, "snowolf");
    // 取数据
    String value = jedis.get(keys);
    System.out.println(value);
    // 释放对象池
    pool.returnResource(jedis);

    Jedis分布式(Sharding/shared一致性哈希)

    1、保留前面的 JedisPoolConfig ,新增Redis的IP(redis1.ip,redis2.ip),完成两个JedisShardInfo 实例 ,将其丢进List中:

    List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
    JedisShardInfo jedisShardInfo1 = 
    new JedisShardInfo(bundle.getString("redis1.ip"), Integer.valueOf(bundle.getString("redis.port")));
    JedisShardInfo jedisShardInfo2
    =
    new JedisShardInfo(bundle.getString("redis2.ip"), Integer.valueOf(bundle.getString("redis.port"))); list.add(jedisShardInfo1); list.add(jedisShardInfo2);

    2、初始化 ShardedJedisPool 代替 JedisPool:

    ShardedJedisPool pool = new ShardedJedisPool(config, list);

    3、改由ShardedJedis,获取Jedis对象:

    // 从池中获取一个Jedis对象
    ShardedJedis jedis = pool.getResource();
    String keys = "name";
    String value = "snowolf";
    // 删数据
    jedis.del(keys);
    // 存数据
    jedis.set(keys, value);
    // 取数据
    String v = jedis.get(keys);
    System.out.println(v);
    // 释放对象池
    pool.returnResource(jedis);

    通过以上方式,向redis进行set操作的key-value,会通过hash而均匀的分配到pool里的redis机器中。

    转载自:http://www.tuicool.com/articles/jM7RF3Y

    参考:http://www.cnblogs.com/liuling/p/2014-4-19-04.html

  • 相关阅读:
    swap函数的例子
    实现类似shared_ptr的引用计数
    使用new分配内存的类需要自己定义拷贝构造函数
    练习13.14 13.15 13.16
    查询单词,综合例子。
    无序容器
    关联容器操作
    关联容器概述
    文本查询程序
    shared_ptr与weak_ptr的例子
  • 原文地址:https://www.cnblogs.com/avivaye/p/4933374.html
Copyright © 2020-2023  润新知