zoukankan      html  css  js  c++  java
  • java-redis字符类数据操作示例(一)

     对于大部分程序猿来讲,学习新知识重在编码实践,于我也是这样。现在初识redis,一直看文章难免感觉是浮光掠影,印象不深。所以间隙中,将自己的测试代码整理成博客,旨在加深记忆并提醒自己对待编程要用心沉下去,起码得要搞清楚各api的正确用法。本次示例主要是对redis string类型的api进行测试,为测试代码创建了一个数据库连接管理类,统一处理连接的创建与关闭。创建一个功能函数式接口,用于数据库连接操作执行 测试方法体。发现了一个没用过的字符串格式化工具MessageFormat,是一个意外的小收获(见笑☺,java新手有点low)。接下来,贴上示例代码。若有问题,欢迎斧正。

    一、功能函数式接口ThrowFunction

      参考博文:http://blog.csdn.net/yangjiachang1203/article/details/52619795

    @FunctionalInterface
    public interface ThrowFunction<T extends ShardedJedis> {
        void run(T conn) throws Exception;
    }

    二、创建Redis连接管理类RedisUtil

    public class RedisUtil {
        /**
         * 工具实例
         */
        public static RedisUtil instance = new RedisUtil();
        private static JedisPool jedisPool;// 非切片连接池
        private static ShardedJedisPool shardedJedisPool;// 切片连接池
        static {
            initialPool();
            initialShardedPool();
        }
    
        /**
         * 初始化非切片池
         */
        private static void initialPool() {
            // 池基本配置
            jedisPool = new JedisPool(getConfig(), "127.0.0.1", 6379);
        }
    
        /**
         * 初始化切片池
         */
        private static void initialShardedPool() {
            // slave链接
            List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
            shards.add(new JedisShardInfo("127.0.0.1", 6379, "master"));
            //远程连接
            shards.add(new JedisShardInfo("192.168.0.122", 6379, "news"));
            // 构造池
            shardedJedisPool = new ShardedJedisPool(getConfig(), shards);
        }
        /**
         * 获取基础配置
         * @return
         */
        private static JedisPoolConfig getConfig(){
            // 池基本配置
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(20);
            config.setMaxIdle(5);
            config.setMaxWaitMillis(20*1000L);
            config.setTestOnBorrow(false);
            return config;
        }
        private RedisUtil(){}
        /**
         * 获取一个新的分布式缓存连接
         * @return
         */
        public ShardedJedis getConn(){
            return shardedJedisPool.getResource();
        }
        /**
         * 执行方法
         * @param func
         */
        public void run(ThrowFunction<ShardedJedis> func){
            ShardedJedis conn = shardedJedisPool.getResource();
            try {
                func.run(conn);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            conn.close();
        }
    }

    三、字符串缓存测试类

      字符串类型的缓存,可以存数字或字符。存数字时可以调用incr,decr,incrBy,decrBy,incrByFloat这些api对数字进行修改,redis内部是自动进行类型转换。存字符串时可以调用append方法对原值进行追加。

    public class StringTest {
        /**
         * 主测试方案
         */
        @Test
        public void test() {
            RedisUtil.instance.run(conn -> stringOper(conn));
            Assert.assertTrue(true);
        }
        /**
         * 测试用的key
         */
        private final String _key = "user-simm";
        /**
         * 字符串操作
         * 
         * @param conn
         */
        private void stringOper(ShardedJedis conn) {
            //存一个数值 100
            conn.set(_key,"100");
            print(conn);
            //逐一递增:100+1
            conn.incr(_key);
            print(conn);
            //逐一递减:100+1-1
            conn.decr(_key);
            print(conn);
            //指定增加值:100+1-1+100
            conn.incrBy(_key,100);
            print(conn);
            //指定减少值:100+1-1+100-100
            conn.decrBy(_key,100);
            print(conn);
            //加一个正浮点数:100+1-1+100-100+5.5
            conn.incrByFloat(_key,5.5);
            print(conn);
            //加一个负浮点数:100+1-1+100-100+5.5-5.5
            conn.incrByFloat(_key,-5.5);
            print(conn);
            //存一个字符串
            conn.set(_key,"abc");
            print(conn);
            //扩展字符串
            conn.append(_key,"+def");
            print(conn);
        }
        private void print(ShardedJedis conn){
            System.out.println(MessageFormat.format("{0}:{1}", _key,conn.get(_key)));
        }
    }

    四、结果输出

      

  • 相关阅读:
    开源项目
    获取手机剩余空间工具类
    圆形图片
    gridview添加header
    Eclipse中10个最有用的快捷键组合
    那些年不错的Android开源项目(转)
    Android 获取系统或SDCARD剩余空间信息(转)
    android之 Activity跳转出现闪屏
    解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题
    Android studio 导入工程 出现错误
  • 原文地址:https://www.cnblogs.com/MrSi/p/8474002.html
Copyright © 2011-2022 走看看