import java.io.UnsupportedEncodingException;
import java.util.Set; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; /**
* 封装redis 缓存服务器服务接口 */
@Service(value = "redisService")
public class RedisServiceImpl implements RedisService { private static String redisCode = "utf-8"; /**
* @param key
*/
public long del(final String... keys) {
return redisTemplate.execute(new RedisCallback() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
long result = 0;
for (int i = 0; i < keys.length; i++) {
result = connection.del(keys[i].getBytes());
}
return result;
}
});
} /**
* @param key
* @param value
* @param liveTime
*/
public void set(final byte[] key, final byte[] value, final long liveTime) {
redisTemplate.execute(new RedisCallback() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
connection.set(key, value);
if (liveTime > 0) {
connection.expire(key, liveTime);
}
return 1L;
}
});
} /**
* @param key
* @param value
* @param liveTime
*/
public void set(String key, String value, long liveTime) {
this.set(key.getBytes(), value.getBytes(), liveTime);
} /**
* @param key
* @param value
*/
public void set(String key, String value) {
this.set(key, value, 0L);
} /**
* @param key
* @param value
*/
public void set(byte[] key, byte[] value) {
this.set(key, value, 0L);
} /**
* @param key
* @return
*/
public String get(final String key) {
return redisTemplate.execute(new RedisCallback() {
public String doInRedis(RedisConnection connection) throws DataAccessException {
try {
return new String(connection.get(key.getBytes()), redisCode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
});
} /**
* @param pattern
* @return
*/
public Setkeys(String pattern) {
return redisTemplate.keys(pattern); } /**
* @param key
* @return
*/
public boolean exists(final String key) {
return redisTemplate.execute(new RedisCallback() {
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
return connection.exists(key.getBytes());
}
});
} /**
* @return
*/
public String flushDB() {
return redisTemplate.execute(new RedisCallback() {
public String doInRedis(RedisConnection connection) throws DataAccessException {
connection.flushDb();
return "ok";
}
});
} /**
* @return
*/
public long dbSize() {
return redisTemplate.execute(new RedisCallback() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
return connection.dbSize();
}
});
} /**
* @return
*/
public String ping() {
return redisTemplate.execute(new RedisCallback() {
public String doInRedis(RedisConnection connection) throws DataAccessException { return connection.ping();
}
});
} }

测试:

package com.aswatson.applicaton;

import com.alibaba.fastjson.JSONObject;
import com.aswatson.client.ChangeDataListener;
import com.aswatson.csc.member.vo.OptionVO;
import com.aswatson.csc.member.vo.ResponseMessages;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate; import java.util.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@Slf4j
public class PipelineRedisController { @Autowired
private RedisTemplate redisTemplate; @Autowired
private ChangeDataListener changeDataListener; // @RequestMapping(value = "/testException" )
// public void testException(){
// changeDataListener.processChangeData();
// } /**
* redis 批量操作其中一种方式
* redis pipeline 管道技术
*/
@RequestMapping(value = "/redisPipeline" )
public void redisPipeline(){ List<Object> list = new ArrayList();
JSONObject json = new JSONObject();
json.put("rr", "值rr");
list.add(json); redisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
connection.openPipeline();
Map<byte[],byte[]> tuple = new HashMap<>(); for (Object obj : list) {
JSONObject objName = JSONObject.parseObject(obj.toString());
Set<String> keys = objName.keySet();
for (String redisKey : keys) {
String value = objName.get(redisKey).toString();
tuple.put(redisKey.getBytes(), value.getBytes());
//设置过期时间
connection.mSet(tuple);
connection.expire(redisKey.getBytes(), 5);
System.out.println("set time=" + LocalDateTime.now());
}
}
connection.closePipeline();
return null;
}
});
} @GetMapping("/testValue/{key}")
public Object getMemberOptionType(@PathVariable(value="key") String key) {
System.out.println("get time=" + LocalDateTime.now() + "/" + testExpeireTime(key));
return LocalDateTime.now() + "/" + testExpeireTime(key);
} private Object testExpeireTime(String key) { return redisTemplate.execute(new RedisCallback() {
public String doInRedis(RedisConnection connection) throws DataAccessException {
try {
return new String(connection.get(key.getBytes()), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
});
} // public static void main(String[] args) {
//
// List<Object> list = new ArrayList();
// JSONObject json = new JSONObject();
// json.put("kk", "测试kk");
// json.put("tt", "测试tt");
// list.add(json);
// for (Object obj : list) {
// System.out.println(obj);
// String [] arr = obj.toString().replace("{", "").replace("}", "").split("=");
// System.out.println(Arrays.asList(arr).get(0));
// System.out.println(Arrays.asList(arr).get(1));
//
// JSONObject objName = JSONObject.parseObject(obj.toString());
// System.out.println(objName.get("kk"));
// }
// } // public static void main(String[] args) {
//
// List list = new ArrayList();
// JSONObject json = new JSONObject();
// json.put("kk", "测试kk");
// list.add(json);
// for (Object obj : list) {
// //用json
// JSONObject objName = JSONObject.parseObject(obj.toString());
// Set<String> keys = objName.keySet();
// for (String redisKey : keys) {
// System.out.println(redisKey);
// System.out.println(objName.get(redisKey));
// }
//
// }
// } }

redis管道技术pipeline一 ——api的更多相关文章

  1. redis 管道技术 pipeline 简介

    redis数据库的主要瓶颈是网络速度,其次是内存与cpu.在应用允许的情况下,优先使用pipeline批量操作.pipeline批量发出请求/一次性获取响应:不是发出多个请求,每个请求都阻塞等待响应, ...

  2. Redis 管道技术

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响 ...

  3. redis管道技术

    1.redis管道pipeline解决的问题: 由于redis通信是通过tcp协议基础,并且是堵塞的处理方式,在第一个请求没有执行并返回前,无法处理第二个请求.所以事件浪费在了网络传输和堵塞请求中. ...

  4. Redis 管道(pipeline)

  5. Redis 管道pipeline

    Redis是一个cs模式的tcp server,使用和http类似的请求响应协议. 一个client可以通过一个socket连接发起多个请求命令. 每个请求命令发出后client通常会阻塞并等待red ...

  6. Redis 数据备份与恢复,安全,性能测试,客户端连接,管道技术,分区(四)

    Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 re ...

  7. 缓存数据库-redis(管道)

    一:Redis 管道技术 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常 ...

  8. Redis 新特性---pipeline(管道)

    转载自http://weipengfei.blog.51cto.com/1511707/1215042 Redis本身是一个cs模式的tcp server, client可以通过一个socket连续发 ...

  9. .NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)

    序言 Redis中的管道(PipeLine)特性:简述一下就是,Redis如何从客户端一次发送多个命令,服务端到客户端如何一次性响应多个命令. Redis使用的是客户端-服务器模型和请求/响应协议的T ...

  10. Redis中的管道(PipeLine)与事物(Transactions)

    Redis中的管道(PipeLine)与事物(Transactions) 序言 Redis中的管道(PipeLine)特性:简述一下就是,Redis如何从客户端一次发送多个命令,服务端到客户端如何一次 ...

随机推荐

  1. 小满OKKICRM与金蝶云星空对接集成客户资料

    小满OKKICRM与金蝶云星空对接集成客户列表查询(更新列表)&客户新增(小满客户对接金蝶客户-P) 数据源平台:小满OKKICRM 小满科技成立于2013年,是阿里巴巴集团战略投资的高新技术 ...

  2. [ABC246C] Coupon

    Problem Statement There are $N$ items in a shop. For each $i = 1, 2, \ldots, N$, the price of the $i ...

  3. 手写滑动同步滚动进度条jq插件

    因需要一种滑动显示内容,并且带可拖动的进度条,即下面这种效果 找了很多插件,总有地方不能满足需求.于是决定自己手写,下面为完整源码: swiper.js 1 $.swiperCalculator = ...

  4. PersistenceException 持久性异常

    首先查看他提供的错误信息 检查pom.xml文件,查看是否有: 确保文件夹是这种xml格式的 操作maven  >>>>clean 和compile       进行清理和重新 ...

  5. 关于windows激活程序的木马病毒分析及处置方法

    客户电脑中毒,锁定几个病毒进程.EDR杀毒.木马专杀工具无法处置,该现象是和深信服外网AF防火墙联动后发现的行为,EDR无感知. 该病毒特征为,每日早上用户开机,均检查到外链du.testjj.com ...

  6. Oracle数据库运维场景下,智能运维如何落地生根?

    简介: 「智能运维大数据平台」是一款开箱即用的运维监控平台,通过特有的平台功能可以将企业的基础架构.应用程序.日志管理结合在一起,提供统一采集.统一存储.关联分析.统一监控企业业务保障能力,保障企业业 ...

  7. 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

    在 Part 1 中,我们一起了解了什么是 Prometheus 和 Grafana,以及使用这些工具的前提条件和优势.在本部分,将继续带您学习如何安装 Helm 以及如何使用 Prometheus ...

  8. 一篇文章彻底搞懂TiDB集群各种容量计算方式

    背景 TiDB 集群的监控面板里面有两个非常重要.且非常常用的指标,相信用了 TiDB 的都见过: Storage capacity:集群的总容量 Current storage size:集群当前已 ...

  9. Java 设置PDF文档过期时间(有效期)

    有些文档具有一定时效性,需在规定时间段内才可阅读查看,针对此类文档,需要设置文档的过期日期.时间等.下面以Java示例演示为例如何给PDF文档设置过期时间.需使用PDF类库, Free Spire.P ...

  10. 记一次kubernetes获取internal Ip错误流程

    本文分享自华为云社区<记一次kubernetes获取internal Ip错误流程>,作者:张俭. 偶尔也回首一下处理的棘手问题吧.问题的现象是,通过kubernetes get node ...