• [转载] 使用Redis的Java客户端Jedis


    转载自http://aofengblog.blog.163.com/blog/static/631702120147298317919/

    在实际的项目开发中,各种语言是使用Redis的客户端库来与Redis交互。针对Java语言,Redis官方推荐Jedis

    Jedis提供了多种操作方式:单机单连接方式、单机连接池方式、多机分布式+连接池方式。

    预备

    jedis-2.5.2
    commons-pool2-2.2.jar

    使用单连接

    此方式仅建议用于开发环境做调试用。

    // 创建连接
    String host = "192.168.56.102"; int port = 6379; Jedis client = new Jedis(host, port);
    // 执行set指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) );
    // 执行get指令 String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) );

    运行上述代码,控制台输出:

    set指令执行结果:OK              
    get指令执行结果:Hello, Redis!

    使用连接池

    此方式适用于仅使用单个Redis实例的场景。

    // 生成连接池配置信息
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(10);
    config.setMaxTotal(30);
    config.setMaxWaitMillis(3*1000);
    
    // 在应用初始化的时候生成连接池
    JedisPool pool = new JedisPool(config, "192.168.56.102", 6379);
    
    // 在业务操作时,从连接池获取连接
    Jedis client = pool.getResource();
    try {
        // 执行指令
        String result = client.set("key-string", "Hello, Redis!");
        System.out.println( String.format("set指令执行结果:%s", result) );
        String value = client.get("key-string");
        System.out.println( String.format("get指令执行结果:%s", value) );
    } catch (Exception e) {
        // TODO: handle exception
    } finally {
        // 业务操作完成,将连接返回给连接池
        if (null != client) {
            pool.returnResource(client);
        }
    } // end of try block
    
    // 应用关闭时,释放连接池资源
    pool.destroy();
    

    运行上述代码,控制台输出:

    set指令执行结果:OK              
    get指令执行结果:Hello, Redis!

    使用连接池+分布式

    在规模较大的系统中,往往会有多个Redis实例做负载均衡。并且还实现主从备份,当主实例发生故障时,切换至从实例提供服务。
    类似于Memcached的客户端,Jedis也提供了客户端分布式操作的方式,采用一致性哈希算法。

    // 生成多机连接信息列表
    List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
    shards.add( new JedisShardInfo("127.0.0.1", 6379) );
    shards.add( new JedisShardInfo("192.168.56.102", 6379) );
    
    // 生成连接池配置信息
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(10);
    config.setMaxTotal(30);
    config.setMaxWaitMillis(3*1000);
    
    // 在应用初始化的时候生成连接池
    ShardedJedisPool pool = new ShardedJedisPool(config, shards);
    
    // 在业务操作时,从连接池获取连接
    ShardedJedis client = pool.getResource();
    try {
        // 执行指令
        String result = client.set("key-string", "Hello, Redis!");
        System.out.println( String.format("set指令执行结果:%s", result) );
        String value = client.get("key-string");
        System.out.println( String.format("get指令执行结果:%s", value) );
    } catch (Exception e) {
        // TODO: handle exception
    } finally {
        // 业务操作完成,将连接返回给连接池
        if (null != client) {
            pool.returnResource(client);
        }
    } // end of try block
    
    // 应用关闭时,释放连接池资源
    pool.destroy();
    

    运行上述代码,控制台输出:

    set指令执行结果:OK              
    get指令执行结果:Hello, Redis!

  • 相关阅读:
    java四种线程池的使用
    @Autowired@Resource@Qualifier的区别
    Unsupported major.minor version 52.0解决办法
    CentOS7配置防火墙
    redis 集群搭建
    excludepathpatterns 无效
    解决 SpringBoot 没有主清单属性
    Java Web应用中调优线程池的重要性
    spring boot application properties配置详解
    Class path contains multiple SLF4J bindings.
  • 原文地址:https://www.cnblogs.com/scott19820130/p/4671845.html
Copyright © 2020-2023  润新知