java-redis字符类数据操作示例(一)

本文通过实战演示了Redis中String类型的API使用,包括数值操作如incr、decr及字符串追加等,展示了如何通过功能函数式接口ThrowFunction进行数据库连接操作,同时介绍了Redis连接管理类RedisUtil的设计与实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 对于大部分程序猿来讲,学习新知识重在编码实践,于我也是这样。现在初识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)));
    }
}

四、结果输出

  

转载于:https://www.cnblogs.com/MrSi/p/8474002.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值