对于大部分程序猿来讲,学习新知识重在编码实践,于我也是这样。现在初识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字符类数据操作示例(一)的更多相关文章

  1. java -io字符流FileWrite操作演示

    FileWriter字符输出流演示: /* * FiileWriter 字符流的操作 * FileWriter 的构造方法 可传递 File类型 还可以传递String类型 * * 方法 : * wr ...

  2. java-redis集合数据操作示例(三)

    redis系列博文,redis连接管理类的代码请跳转查看<java-redis字符类数据操作示例(一)>. 一.集合类型缓存测试类 public class SetTest { /** * ...

  3. java-redis列表数据操作示例(二)

    接上篇博文<java-redis字符类数据操作示例(一)>,redis连接管理类的代码请跳转查看. 一.列表类型缓存测试类 public class ListTest { /** * 主测 ...

  4. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  5. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  6. java中字节和字符的转换操作

    package com.ywx.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputSt ...

  7. java、python及jmeter操作redis(接口自动化必备)

    redis是nosql数据库之一,其存储结构简单,提供高性能服务,所以在架构中是很常用的. 在做接口自动化测试过程中,有时也会涉及到redis,比如:发送短信验证码,我们做接口自动化测试,如何模拟发送 ...

  8. 理解Java中字符流与字节流

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  9. 理解Java中字符流与字节流的区别(转)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

随机推荐

  1. Linux下环境变量设置的三种方法

    如想将一个路径加入到$PATH中,可以像下面这样做: 1.控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了:$PATH="$PATH" ...

  2. 使用SQL 提示优化sql

    use index 在查询语句中表名的后面,添加use index来提供希望mysql去参考的索引列表,就可以让mysql不再考虑其他可用的索引 explain select * from renta ...

  3. 自动化运维工具SaltStack - 多环境(使用记录【state.sls 与 state.highstate】)

    转自:https://segmentfault.com/a/1190000000513137 今天在进行 saltstack 多环境的时候,遇到一个问题,最终得到解决,好记性不如烂笔头,记录. 首先, ...

  4. js禁止开发者工具

    $(document).keydown(function() { return key(arguments[0]) }); function key(e) { //f12 var keynum; if ...

  5. WebSphere--用户简要表

     Application Server 含有 com.ibm.servlet.personalization.userprofile 软件包中的类,这些类使维护关于 Web 站点访问者的持久信息和利用 ...

  6. Python简单爬虫Requests

    首先添加库 附配环境变量:安装环境变量 cmd==> 输入指令: path=%path%;C:\Python(Python安装路径) 回车 python2.7版本可能没有pip的话可以先到www ...

  7. node 在控制台打印有色彩的输出

    在学习 node 过程中,因为没有找到有断点的调试方法,只能退而次之,在控制台打印调试. 但整个控制台的输出都是一种颜色,有时候很难找到自己需要的信息,这时,有颜色的打印就会帮上很大的忙. conso ...

  8. JDK自带的Timer类

    Timer类负责设定TimerTask的起始和间隔执行时间.具体的执行任务,由用户创建一个TimerTask的继承类,并实现其run()方法 timer.schedule()

  9. android在一个应用程序员启动另一个程序

    一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); int ...

  10. 2018-01-05-医药行业的IT革命探讨

    layout: post title: 2018-01-05-医药行业的IT革命探讨 key: 20180105 tags: IT AI 医疗 modify_date: 2018-01-05 --- ...