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