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

java

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

}

}

四、结果输出

  

以上是 java-redis字符类数据操作示例(一) 的全部内容, 来源链接: utcz.com/z/393427.html

回到顶部