对于大部分程序猿来讲,学习新知识重在编码实践,于我也是这样。现在初识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. 2018/1/27 每日一学 最长不降序子序列的O(n*logn)算法

    手动维护一个数组模拟即可,233-- 可以使用algorithm中的lower_bound(相当于二分) 代码如下: #include<cstdio> #include<algori ...

  2. webpack 基本打包方法

    webpack的打包基本配置文件webpack.config.js 可以在webpack.config.js里面写好配置:比如前章节所总结的四大核心 |-- add.js // 定义一个普通加法函数 ...

  3. Django_中国化

    需求: 要求Django显示中文,并使用北京时间 问题原因: Django具有相当的国际化,已经内置了多种语言,汉语当然也不落下,Django默认的时间是utc时间,也就是说相隔八个时区的中国,显示北 ...

  4. 渲染引擎(The rendering engine)

    渲染引擎的职责就是渲染,即在浏览器窗口中显示所请求的内容.这是每一个浏览器的核心部分,所以渲染引擎也称为浏览器内核. 渲染引擎一开始会从网络层获取请求文档的内容. 获取文档后,渲染引擎开始解析 htm ...

  5. Spring 4.x (一)

    1 Spring是什么? Spring是一个开源框架 Spring是为简化企业级应用开发而生的,使用Spring可以使得简单的JavaBean能够实现以前只有EJB才能实现的功能. Spring是一个 ...

  6. Node-debug方法

    本文使用配置node-inspector配合chorme完成debug(编辑器使用SublimeText3). 1.用命令行进入安装node的目录,使用npm install -g node-insp ...

  7. Java中的try catch finaly先后调用顺序

    自我总结,有什么不足或好的方案,希望大家给予纠正,感激不尽! 目的:try catch finaly的顺序执行,和大家复习一遍. 方法:debug来确认执行顺序.(需要引入junit包) 废话不多说, ...

  8. jQuery&Ajax应用

    jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第二层是load(),$.get()和$.post()方法,第三层是$.getScript(),$.getJ ...

  9. Java修改maven的默认jdk版本为1.7

    Java修改maven的默认jdk版本 问题: 1.创建maven项目的时候,jdk版本是1.5版本,而自己安装的是1.7或者1.8版本. 2.每次右键项目名-maven->update pro ...

  10. Hadoop学习笔记四

    一.fsimage,edits和datanode的block在本地文件系统中位置的配置 fsimage:hdfs-site.xml中的dfs.namenode.name.dir  值例如file:// ...