RedisTemplate 管道

@Autowired
	RedisTemplate<Object, Object> redis;
	@GetMapping("/redisTest")
	@ResponseBody
	public String test() {
		RedisUtil redisUtil = new RedisUtil(redis);
		int number = 5;
		Long start = System.currentTimeMillis();
		for (int i = 0; i < number; ++i) {
			redisUtil.set(("T" + i), (i + ""));
		}
		Long end = System.currentTimeMillis();
		System.out.println("--" + (end - start));

		// 1.executePipelined 重寫 入參 RedisCallback 的doInRedis方法
		List<Object> resultList = redis.executePipelined(new RedisCallback<Object>() {

			@Override
			public String doInRedis(RedisConnection connection) throws DataAccessException {
				// 2.connection 打開管道
				connection.openPipeline();
				// 3.connection 給本次管道內添加 要一次性執行的多條命令
				for (int i = 0; i < number; ++i) {
					connection.set(("B" + i).getBytes(), (i + "").getBytes());
				}
				// 4.關閉管道 不需要close 否則拿不到返回值
				// connection.closePipeline();
				// 這裏一定要返回null,最終pipeline的執行結果,纔會返回給最外層
				return null;
			}
		});
		Long start1 = System.currentTimeMillis();
		System.out.println("---" + (start1 - end));
		// 5.最後對redis pipeline管道操作返回結果進行判斷和業務補償
		for (Object object : resultList) {
			System.out.println(object);
		}
		return "test:" + (end - start) + ":" + (start1 - end);
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章