对于大部分程序猿来讲,学习新知识重在编码实践,于我也是这样。现在初识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. P2045 方格取数加强版

    P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...

  2. 安卓开发-intent在Activity之间数据传递

    安卓开发-intent在Activity之间数据传递 [TOC] intent实现普通跳转 使用intent的setclass方法,示例(由此界面跳转到NewActivity界面) //使用setOn ...

  3. GIT_linux服务器与本地环境构建

    linux安装git包 很多yum源上自动安装的git版本为1.7,这里手动编译重新安装1:安装依赖包yum install curl-devel expat-devel gettext-devel ...

  4. There were X failed login attempts since the last successful login

    如题,开始玩Linux的人,每次登陆的时候,肯定会遇到这个提示,好担心系统被人攻破,那怎么把这些试探的IP抓出来,并屏蔽呢,今天就记录一下我的做法,供大家参考 其实这个问题已经在系统级别支持解决,目前 ...

  5. junit3.8的使用

    今天开始junit使用系列,第一篇梳理junit3X系列,先贴下代码来体验下. 测试源代码如下: package test.junit38test; /** * @创建作者: LinkinPark * ...

  6. asp.net web api 向客户端返回错误信息

    1使用Http状态码 ASP.NET Web Api框架提供了Http状态码的值,如下图所示. 虽然有这些预定义的状态码,但在实际项目中使用自定状态码结合预定义状态码更有优势. 通过在适当的位置抛出异 ...

  7. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    参考:http://blog.csdn.net/luwei42768/article/details/72268246 eclipse项目中创建maven项目后,有时在执行命令maven update ...

  8. su鉴定故障

    su切换用户鉴定故障 [yolo1@izqfsfqp8ejn9zz ~]$ su root密码:su: 鉴定故障[yolo1@izqfsfqp8ejn9zz ~]$ sudo root 我们信任您已经 ...

  9. 搭建yum仓库与定制rpm包

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...

  10. 华为交换机boot默认密码

    交换机系统启动bootrom时,在2秒内按下"CTRL+B",此处需要输入密码才能进入BOOTROM菜单.默认密码如下: 1. S9300 V100R006及其之前的版本:9300 ...