精华内容
下载资源
问答
  • 创建连接池对象创建连接对象; @Test //Redis 连接池 public void redis4(){ JedisPoolConfig poolConfig = new JedisPoolConfig();//创建连接池配置对象; poolConfig.setMaxTotal(10);//

    1.什么是Redis连接池?

    Redis 和MySQL一样都有连接池,使用连接池可以***避免频繁的创建和销毁链接对象而消耗资源***;

    2.如何使用Redis连接池?

    创建连接池配置对象;
    创建连接池对象;
    创建连接对象;

    @Test   //Redis 连接池
    public void redis4(){
        JedisPoolConfig poolConfig = new JedisPoolConfig();//创建连接池配置对象;
        poolConfig.setMaxTotal(10);//最大活跃数
        poolConfig.setMaxIdle(2);//最大空闲数
        poolConfig.setMinIdle(5);//最小空闲数
        poolConfig.setMaxWaitMillis(3000);//当连接池空了之后多久没有获取到Jedis对象就超时;
    
        //创建连接池对象,引入连接池配置对象
        JedisPool jedisPool = new JedisPool(poolConfig,"10.11.57.76",6379);
        //获取连接 ,最后还是要来创建连接对象jedis;
        Jedis jedis = jedisPool.getResource();
        String age = jedis.get("age");
        System.out.print(age);
    }
    

    。。。。。。。。。。。。。

    嘻哈的简写笔记

    。。。。。。。。。。。。。

    展开全文
  • 本文源自【大学之旅_谙忆的...如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动。Maven项目可以直接在pom.xml中加入jedis包驱动: <!-- https://mvnrepository.com/artifact/redis.clien

    转载请注明出处:http://blog.csdn.net/qq_26525215

    本文源自大学之旅_谙忆的博客

    如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动。

    Maven项目可以直接在pom.xml中加入jedis包驱动:

            <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>

    Jedis中操作String,List,Set,Map,以及集合排序

    package cn.hncu;
    
    import org.junit.Before;
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 陈浩翔.
     * Date: 2017/3/4.
     * Time: 下午 1:21.
     * Explain:Java操作Redis测试
     */
    public class TestRedis {
    
        private Jedis jedis;
    
        @Before
        public void setJedis() {
            //连接redis服务器(在这里是连接本地的)
            jedis = new Jedis("127.0.0.1", 6379);
            //权限认证
            jedis.auth("chenhaoxiang");
            System.out.println("连接服务成功");
        }
    
        /**
         * Redis操作字符串
         */
        @Test
        public void testString() {
            //添加数据
            jedis.set("name", "chx"); //key为name放入value值为chx
            System.out.println("拼接前:" + jedis.get("name"));//读取key为name的值
    
            //向key为name的值后面加上数据 ---拼接
            jedis.append("name", " is my name;");
            System.out.println("拼接后:" + jedis.get("name"));
    
            //删除某个键值对
            jedis.del("name");
            System.out.println("删除后:" + jedis.get("name"));
    
            //s设置多个键值对
            jedis.mset("name", "chenhaoxiang", "age", "20", "email", "chxpostbox@outlook.com");
            jedis.incr("age");//用于将键的整数值递增1。如果键不存在,则在执行操作之前将其设置为0。 如果键包含错误类型的值或包含无法表示为整数的字符串,则会返回错误。此操作限于64位有符号整数。
            System.out.println(jedis.get("name") + " " + jedis.get("age") + " " + jedis.get("email"));
        }
    
        @Test
        public void testMap() {
            //添加数据
            Map<String, String> map = new HashMap<String, String>();
            map.put("name", "chx");
            map.put("age", "100");
            map.put("email", "***@outlook.com");
            jedis.hmset("user", map);
            //取出user中的name,结果是一个泛型的List
            //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key是可变参数
            List<String> list = jedis.hmget("user", "name", "age", "email");
            System.out.println(list);
    
            //删除map中的某个键值
            jedis.hdel("user", "age");
            System.out.println("age:" + jedis.hmget("user", "age")); //因为删除了,所以返回的是null
            System.out.println("user的键中存放的值的个数:" + jedis.hlen("user")); //返回key为user的键中存放的值的个数2
            System.out.println("是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录 返回true
            System.out.println("user对象中的所有key:" + jedis.hkeys("user"));//返回user对象中的所有key
            System.out.println("user对象中的所有value:" + jedis.hvals("user"));//返回map对象中的所有value
    
            //拿到key,再通过迭代器得到值
            Iterator<String> iterator = jedis.hkeys("user").iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                System.out.println(key + ":" + jedis.hmget("user", key));
            }
            jedis.del("user");
            System.out.println("删除后是否存在key为user的记录:" + jedis.exists("user"));//是否存在key为user的记录
    
        }
    
        /**
         * jedis操作List
         */
        @Test
        public void testList(){
            //移除javaFramwork所所有内容
            jedis.del("javaFramwork");
            //存放数据
            jedis.lpush("javaFramework","spring");
            jedis.lpush("javaFramework","springMVC");
            jedis.lpush("javaFramework","mybatis");
            //取出所有数据,jedis.lrange是按范围取出
            //第一个是key,第二个是起始位置,第三个是结束位置
            System.out.println("长度:"+jedis.llen("javaFramework"));
            //jedis.llen获取长度,-1表示取得所有
            System.out.println("javaFramework:"+jedis.lrange("javaFramework",0,-1));
    
            jedis.del("javaFramework");
            System.out.println("删除后长度:"+jedis.llen("javaFramework"));
            System.out.println(jedis.lrange("javaFramework",0,-1));
        }
    
        /**
         * jedis操作Set
         */
        @Test
        public void testSet(){
            //添加
            jedis.sadd("user","chenhaoxiang");
            jedis.sadd("user","hu");
            jedis.sadd("user","chen");
            jedis.sadd("user","xiyu");
            jedis.sadd("user","chx");
            jedis.sadd("user","are");
            //移除user集合中的元素are
            jedis.srem("user","are");
            System.out.println("user中的value:"+jedis.smembers("user"));//获取所有加入user的value
            System.out.println("chx是否是user中的元素:"+jedis.sismember("user","chx"));//判断chx是否是user集合中的元素
            System.out.println("集合中的一个随机元素:"+jedis.srandmember("user"));//返回集合中的一个随机元素
            System.out.println("user中元素的个数:"+jedis.scard("user"));
        }
    
        /**
         * 排序
         */
        @Test
        public void test(){
            jedis.del("number");//先删除数据,再进行测试
            jedis.rpush("number","4");//将一个或多个值插入到列表的尾部(最右边)
            jedis.rpush("number","5");
            jedis.rpush("number","3");
    
            jedis.lpush("number","9");//将一个或多个值插入到列表头部
            jedis.lpush("number","1");
            jedis.lpush("number","2");
            System.out.println(jedis.lrange("number",0,jedis.llen("number")));
            System.out.println("排序:"+jedis.sort("number"));
            System.out.println(jedis.lrange("number",0,-1));//不改变原来的排序
            jedis.del("number");//测试完删除数据
        }
    
    
    }

    Redis连接池

    package cn.hncu;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 陈浩翔.
     * Date: 2017/3/4.
     * Time: 下午 10:14.
     * Explain:Redis连接池
     */
    public final class RedisPool {
        //Redis服务器IP
        private static String ADDR = "127.0.0.1";
        //Redis的端口号
        private static Integer PORT = 6379;
        //访问密码
        private static String AUTH = "chenhaoxiang";
    
        //可用连接实例的最大数目,默认为8;
        //如果赋值为-1,则表示不限制,如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
        private static Integer MAX_TOTAL = 1024;
        //控制一个pool最多有多少个状态为idle(空闲)的jedis实例,默认值是8
        private static Integer MAX_IDLE = 200;
        //等待可用连接的最大时间,单位是毫秒,默认值为-1,表示永不超时。
        //如果超过等待时间,则直接抛出JedisConnectionException
        private static Integer MAX_WAIT_MILLIS = 10000;
        private static Integer TIMEOUT = 10000;
        //在borrow(用)一个jedis实例时,是否提前进行validate(验证)操作;
        //如果为true,则得到的jedis实例均是可用的
        private static Boolean TEST_ON_BORROW = true;
        private  static JedisPool jedisPool = null;
    
        /**
         * 静态块,初始化Redis连接池
         */
        static {
            try {
                JedisPoolConfig config = new JedisPoolConfig();
            /*注意:
                在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig没有setMaxActive和setMaxWait属性了
                这是因为高版本中官方废弃了此方法,用以下两个属性替换。
                maxActive  ==>  maxTotal
                maxWait==>  maxWaitMillis
             */
                config.setMaxTotal(MAX_TOTAL);
                config.setMaxIdle(MAX_IDLE);
                config.setMaxWaitMillis(MAX_WAIT_MILLIS);
                config.setTestOnBorrow(TEST_ON_BORROW);
                jedisPool = new JedisPool(config,ADDR,PORT,TIMEOUT,AUTH);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 获取Jedis实例
         * @return
         */
        public synchronized static Jedis getJedis(){
            try {
                if(jedisPool != null){
                    Jedis jedis = jedisPool.getResource();
                    return jedis;
                }else{
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        public static void returnResource(final Jedis jedis){
            //方法参数被声明为final,表示它是只读的。
            if(jedis!=null){
                jedisPool.returnResource(jedis);
                //jedis.close()取代jedisPool.returnResource(jedis)方法将3.0版本开始
                //jedis.close();
            }
        }
    }
    

    RedisJava测试连接池

    package cn.hncu;
    
    import redis.clients.jedis.Jedis;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 陈浩翔.
     * Date: 2017/3/4.
     * Time: 下午 12:28.
     * Explain:测试RedisPool
     */
    public class RedisJava {
    
        public static void main(String[] args) {
            RedisPool.getJedis().set("name","陈浩翔");
            System.out.println(RedisPool.getJedis().get("name"));
        }
    
    }
    

    本篇博客涉及到的源码链接:

    ->点击访问源码-©CHX

    
    本文章由[谙忆]编写, 所有权利保留。
    欢迎转载,分享是进步的源泉。

    转载请注明出处:http://blog.csdn.net/qq_26525215

    本文源自大学之旅_谙忆的博客

    展开全文
  • 尝试通过Java创建Redis连接池 依赖包:jedis.jar 和 spring-data-redis.jar都存在下发现JedisPoolConfig对象没有诸如setMaxIdel()等相关的配置函数 以为是版本兼容问题,在修改spring版本,以及上面两个依赖包...

    找到一本整合开发的教材

    尝试通过Java创建Redis的连接池

    依赖包:jedis.jar 和 spring-data-redis.jar都存在下发现JedisPoolConfig对象没有诸如setMaxIdel()等相关的配置函数

    以为是版本兼容问题,在修改spring版本,以及上面两个依赖包的版本无果后,尝试以spring配置文件,以注入方式来运行,发现控制台报错:

    找不到类,直接百度一波,原来是缺少了依赖包:commons-pool.jar,导入运行成功,同时那个JedisPoolConfig对象下灵异的多了几个方法:

     

    我看了看手上的参考教材,敲尼玛。

    展开全文
  • 首先说一下连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。连接池就是为了避免重复多...

    首先说一下连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。连接池就是为了避免重复多次的打开数据库连接而造成的性能的下降和系统资源的浪费。
    直接上代码:

    /**
     * redis 连接池
     * Class RedisPool
     */
    class RedisPool
    {
        private static $connections = array(); //定义一个对象池
        private static $servers = array(); //定义redis配置文件
     
        /**
         * 定义添加redis配置方法
         * @param $conf
         */
        public static function addServer($conf)
        {
            foreach ($conf as $alias => $data) {
                self::$servers[$alias] = $data;
            }
        }
     
        /**
         * 两个参数要连接的服务器KEY,要选择的库
         * @param $alias  库别名
         * @param int $select
         * @return mixed
         */
        public static function getRedis($alias, $select = 0)
        {
            //判断连接池中是否存在
            if (!array_key_exists($alias, self::$connections)) {
                $redis = new \Redis();
                $redis->connect(self::$servers[$alias][0], self::$servers[$alias][1]);
                self::$connections[$alias] = $redis;
                if (isset(self::$servers[$alias][2]) && self::$servers[$alias][2] != "") {
                    self::$connections[$alias]->auth(self::$servers[$alias][2]);
                }
            }
            self::$connections[$alias]->select($select);
            return self::$connections[$alias];
        }
    

    使用方式:

    $conf = array(
        'R' =&gt; array('127.0.0.1',6379)   //定义Redis配置, R为自定义名称
        );
        RedisPool::addServer($conf); //加载Redis配置
        $redis = RedisPool::getRedis('R'); //连接R,使用默认0库
        $redis-&gt;set('user','private'); //数据操作
        echo $redis -&gt;get('user');
    )
    

    建议封装为一个函数,在使用的时候直接调用获得一个redis实例。
    转自:uiucode.com

    展开全文
  • 如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动。 Maven项目可以直接在pom.xml中加入jedis包驱动: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> ...
  • redis连接池 减少redis的重复连接,降低内存消耗!**通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没问题的, 但当并发量比较高的...
  • 【Redis】redis连接池

    2018-06-03 21:21:33
    一、java工程连接redis数据库:本文不再赘述,为各位读者推荐博客:https://blog.csdn.net/it_0101/article/details/77772625二、redis连接池1、为什么使用redis连接池? 首先Redis也是一种数据库,它基于C/S模式,...
  • Redis连接池技术

    2020-10-18 17:55:51
    1.为何用连接池。 数据库一次性访问人数有限,每次访问都会创建一个连接对象,影响效率 2.java代码 package cn.itsource.jedis; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients....
  • 一、由来 java操作redis,常用的是jedis,,作为一个缓存数据库,或者称之为nosql类型的数据库,,redis也有连接对象, 那么,问题来了,我们通过连接对象访问redis的...此时,就用到了redis连接池技术,jedis中...
  • 关于redis连接池

    2018-06-07 13:36:00
    您可以通过将已创建连接池实例传递给Redis类的connection_pool参数,来重写此行为并使用现有的连接池。您可以选择这样做,以便实现客户端分片或对连接的管理方式有更好的粒度控制。   2、一般写 r = Redis(...
  • c++ redis连接池的实现

    2020-09-13 22:49:29
    学习teamtalk服务端源码,把redis连接池的实现记录下,用到了hiredis三方库和头文件。 整个redis缓存池是三个类实现的,redis-manager,redis-pool,redis-conn。 main函数获取redis-manager对象实例 main() { /...
  • Redis连接池 jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个...
  • Java操作redis连接池

    2017-10-27 09:41:34
    /** * 获取jedis连接池 * */ public static JedisPool getPool(){ if(pool == null){ //创建jedis连接池配置 JedisPoolConfig config = new JedisPoolConfig();
  • 程序类型: C++连接池抽象类 适用平台: Linux 适用数据库: Mysql(亲测可用), ...简单介绍: 这段时间开发服务器涉及到redis和mysql数据库连接池, 在网上翻阅资料基本上都是针对性的,比如针对mysql设计的mysql连接...
  • 演示Redis连接池JedisPool 连接池 2. 笔者代码中的注释有各种实用说明(当然你觉得注释碍眼可以直接删除): (a).遇到异常及解决方案 (b).一些使用说明 ©.知识点对比与类比 3. 此项目演示需要jedis.jar和commons-...
  • java redis连接池

    千次阅读 2020-07-08 15:42:03
    jedis连接池:JedisPool 创建JedisPool连接池对象 调用方法 getResource()方法获取Jedis连接 //创建一个配置对象 JedisPoolConfig config = new JedisPoolConfig(); //最大活动对象数 config.setMaxTotal(50); //...
  • Redis连接池介绍 创建连接池配置文件 单机版的Redis连接池 集群版的Redis连接池 总结 Jedis使用方式的介绍  Jedis就是Java实现的操作Redis的一套API集合,没有太多需要说明的,可以参考这篇博客,...
  • 写这篇文章的初衷源于前几天公司的Redis连接池溢出事件,后来是借助SpringBean的生命周期特征解决了连接池溢出问题。基础稍微好点的人应该知道,spring管理的bean,可以自定义初始化方法init,和bean销毁方法destroy...
  • java配置redis连接池

    2018-10-02 19:43:48
    * redis连接池 * @Description: TODO(用一句话描述该文件做什么) * @author gc * @date 2018年10月2日 * */ public class RedisPool { public Jedis getJedis(){ JedisPool jedisPool = new JedisPool(...
  • Redis连接池Lettuce Jedis 区别

    千次阅读 2020-12-12 09:54:50
    Lettuce 和 Jedis 的定位...Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接 Lettuce Lettuce的连接是基于Netty的,连接实例(State
  • 连接池:简单理解就是一个容器,里面放了一堆的连接对象,这些对象可以用于访问特定的资源,例如JDBC数据库连接池,它有很多连接池的实现,例如:Druid,HikariCP,C3p0,DBCP等等,下面以NoSQL Redis为例,实现一个...
  • TCP的创建需要三次握手,如果使用连接池技术,不用每次都是创建TCP连接,避免了耗时的三次握手操作。而且在非池化的情况下,每次的TCP销毁要四次挥手,以及java对象的GC,都需要时间与性能消耗。 2. 资源分配。如果...
  • pool=redis.ConnectionPool(host='127.0.0.1', port=6379,max_...'''所有的网络通信都是socket来进行通信的创建连接池,创建连接池的过程,就是多个socket的过程去连接池中获取连接创建连接池,在连接他''' 例子...
  • java Jedis api:redis集群api JedisCluster、redis连接池api JedisPool Redis 集群搭建、Spring Data Redis使用 redis 集群搭建 redis报错信息:CLUSTERDOWN Hash slot not served 和 No...
  • Redis连接池不释放

    2015-08-21 17:44:09
    项目并发量非常高,客户端使用Jedis,每个请求都会从Jedis链接(JedisPool)中获取Jedis链接,通过Jedis链接对象,操作Redis数据库中的数据,Redis服务端连接不释放,一直增长,无论线程池调多大,随着时间的推移...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,431
精华内容 10,972
关键字:

创建redis连接池对象

redis 订阅