• [java学习点滴]jedis的简单使用


    环境:

      idea、jedis 2.8.0、windows 7sp1

      引入jar包:

          <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.8.0</version>
            </dependency>

    封装简单类,可以用于分布式,引入了连接池

    public final class JedisUtils {
        private static ShardedJedisPool shardedJedisPool;
    
        private JedisUtils() {
        }
    
        /**
         * 单例对象
         * @return
         */
        public static ShardedJedisPool instance() {
            if (shardedJedisPool != null) return shardedJedisPool;
            else {
                shardedJedisPool = getShardedJedisPool();
                return shardedJedisPool;
            }
        }
    
        /**
         *
         * @return
         */
        private static ShardedJedisPool getShardedJedisPool() {
            // 生成多机连接信息列表,一般情况下,应该从配置文件或者其他地方获取,比如ZooKeeper之类的
            List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
            shards.add(new JedisShardInfo("127.0.0.1", 6039));
            shards.add(new JedisShardInfo("127.0.0.1", 6040));
    
            // 生成连接池配置信息
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(10);// 最大空闲连接数
            config.setMaxTotal(30); // 最大连接数
            config.setMaxWaitMillis(3 * 1000);// 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
            config.setTestWhileIdle(true); //
            config.setTestOnBorrow(false);// 在获取连接的时候检查有效性, 默认false,性能考虑,正式环境为false
            config.setTestOnReturn(false); // 性能考虑,正式环境为false
    
            // 在应用初始化的时候生成连接池
            return new ShardedJedisPool(config, shards);
        }
    
        /**
         * 应用关闭时,释放连接池资源
         * @param pool
         */
        public void poolDestroy(ShardedJedisPool pool) {
            pool.destroy();
        }
    }

    业务场景:

    public class JedisTest {
    
        private final static Logger logger = LoggerFactory.getLogger(Loop.class);
    
        public JedisTest() {
        }
    
        /**
         * @param key
         * @return
         */
        public String getValue(String key) {
            // 在业务操作时,从连接池获取连接
            ShardedJedis client = JedisUtils.instance().getResource();
            try {
                String value = client.get(key);
                System.out.println(String.format("get指令执行结果:%s", value));
                return value;
    
            } catch (Exception e) {
                // TODO: handle exception
                logger.error(this.getClass().toString(), e.getMessage());
            } finally {
                // 业务操作完成,将连接返回给连接池
                if (null != client) {
                    client.close();
                }
            } // end of try block
    
            return "";
        }
    
        /**
         * @param key
         * @param value
         * @return
         */
        public boolean setValue(String key, String value) {
    
            // 在业务操作时,从连接池获取连接
            ShardedJedis client = JedisUtils.instance().getResource();
            try {
                String result = client.set(key, value);
                System.out.println(String.format("set指令执行结果:%s", result));
    
                return true;
    
            } catch (Exception e) {
                logger.error(this.getClass().toString(), e.getMessage());
            } finally {
                // 业务操作完成,将连接返回给连接池
                if (null != client) {
                    client.close();
                }
            } // end of try block
    
            return false;
        }
    
        /**
         * 根据key,清理缓存
         * @param key
         * @return
         */
        public boolean delKey(String key){
            // 在业务操作时,从连接池获取连接
            ShardedJedis client = JedisUtils.instance().getResource();
            try {
                Long result = client.del(key);
                System.out.println(String.format("del 指令执行结果:%s", result));
    
                return true;
    
            } catch (Exception e) {
                // TODO: handle exception
                logger.error(this.getClass().toString(), e.getMessage());
            } finally {
                // 业务操作完成,将连接返回给连接池
                if (null != client) {
                    client.close();
                }
            } // end of try block
    
            return false;
        }

    测试用例:

    public class JedisTest {
    
        @Test
        public void jedis_setValue_Test() {
            com.hager.javalearning.lessions.lessionjedis.JedisTest jedisTest = new com.hager.javalearning.lessions.lessionjedis.JedisTest();
    
            boolean result = jedisTest.setValue("test.1125", "hello world.");
    
            Assert.assertTrue(result);
    
        }
    
        @Test
        public void jedis_getValue_Test() {
            com.hager.javalearning.lessions.lessionjedis.JedisTest jedisTest = new com.hager.javalearning.lessions.lessionjedis.JedisTest();
    
            String result = jedisTest.getValue("test.1125");
            String hopeResult = "hello world.";
    
            Assert.assertEquals(hopeResult, result);
        }
    
        @Test
        public void jedis_delKey_Test(){
            com.hager.javalearning.lessions.lessionjedis.JedisTest jedisTest = new com.hager.javalearning.lessions.lessionjedis.JedisTest();
    
            boolean result = jedisTest.delKey("test.1125");
            Assert.assertTrue(result);
    
            String cacheResult=jedisTest.getValue("test.1125");
            Assert.assertNull(cacheResult);
        }

    =========

    另外,最近也在学习java基础知识,把最近两天的能记得起来的,也记录一下吧:

    1、基本类型与引用类型:

      感觉基本类型就是类似于C#中的值类型,包括 byte,short,int,long,float,double,boolean,char字符类型 8种;

      引用类型,类,接口,数组

                                  ┏数值型━┳━整数型:byte short int long
    ┏基本数据类型━━┫ ┗━浮点型:float double
    ┃ ┣字符型:char
    数据类型╋ ┗布尔型:boolean
    ┃ ┏类(class)
    ┗引用数据类型━━╋接口(interface)
    ┗数组(array)

    2、继承,关键字extends:遵循 “两同两小一大”:(李刚的 java疯狂讲义笔记)

       两同:方法名、形参列表相同;

      两小:子类方法返回值类型应比父类的返回值类型小或者相等;

      一大,指的是子类的访问权限,比父类的的访问权限更大或者相等;(说的就是private,public,protected,这几个东东)

    参考:

    http://aofengblog.blog.163.com/blog/static/631702120147298317919/
  • 相关阅读:
    振动传感器
    水银开关式碰撞传感器
    倾斜传感器
    光敏传感器
    激光传感器的使用
    html字符串 转 json
    浏览器播放视频加快进功能
    处理箭头函数单个参数括号规则冲突
    VUE-directive指令之语法、引用、钩子函数、参数
    win10系统自动升级怎么还原到以前的系统
  • 原文地址:https://www.cnblogs.com/hager/p/6102658.html
Copyright © 2020-2023  润新知