spring-data整合了redispool, 并提供redisTemplate使用, 但有时需要用到shradedJedisPool, 就需要手动注入了

手写redispool并注入springboot中

1, redis配置文件

redis.properties

redis.config.ip=192.168.50.37
redis.config.port= redis.config.maxTotal=
redis.config.maxIdle=
redis.config.maxWaitmillis=
redis.config.testOnborrow=false

2, RedisClientConfig.java, 获取spring注入的属性值

package com.iwhere.learn.redis.java;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; /**
* 使用一个专门的类来获取配置文件
* @author wenbronk
* @time 2017年4月6日 上午11:11:57 2017
*/ @Component(value="redisClientConfig")
@ConfigurationProperties(prefix = "redis.config")
@PropertySource("classpath:source/redis.properties")
public class RedisClientConfig { private String ip;
private int port;
private int maxTotal;
private int maxIdle;
private long maxWaitmillis;
private boolean testOnborrow; public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public int getMaxTotal() {
return maxTotal;
}
public void setMaxTotal(int maxTotal) {
this.maxTotal = maxTotal;
}
public int getMaxIdle() {
return maxIdle;
}
public void setMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}
public long getMaxWaitmillis() {
return maxWaitmillis;
}
public void setMaxWaitmillis(long maxWaitmillis) {
this.maxWaitmillis = maxWaitmillis;
}
public boolean isTestOnborrow() {
return testOnborrow;
}
public void setTestOnborrow(boolean testOnborrow) {
this.testOnborrow = testOnborrow;
}
}

3, RedisClientUtils, 用于生成 jedisPool 并注入spring中

package com.iwhere.learn.redis.java;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool; /**
* 用于获取redis连接池
*
* @author wenbronk
* @time 2017年3月24日 下午1:43:36 2017
*/ @Component
public class RedisClientUtil { @Autowired
private RedisClientConfig redisClientConfig; /** 非切片连接池 */
private JedisPool jedisPool; /** 切片连接池 */
private ShardedJedisPool shardedJedisPool; /**
* 初始化非切片连接池
*/
public JedisPool getJedisPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(redisClientConfig.getMaxTotal());
config.setMaxIdle(redisClientConfig.getMaxIdle());
config.setMaxWaitMillis(redisClientConfig.getMaxWaitmillis());
config.setTestOnBorrow(redisClientConfig.isTestOnborrow()); jedisPool = new JedisPool(config, redisClientConfig.getIp(), redisClientConfig.getPort());
return jedisPool;
} /**
* 初始化切片连接池
*/
// @Bean(name="shardedJedisPool")
public ShardedJedisPool getShardedJedisPool() {
// 池基本配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(redisClientConfig.getMaxTotal());
config.setMaxIdle(redisClientConfig.getMaxIdle());
config.setMaxWaitMillis(redisClientConfig.getMaxWaitmillis());
config.setTestOnBorrow(redisClientConfig.isTestOnborrow()); ArrayList<JedisShardInfo> list = new ArrayList<JedisShardInfo>();
list.add(new JedisShardInfo(redisClientConfig.getIp(), redisClientConfig.getPort(), "master")); shardedJedisPool = new ShardedJedisPool(config, list);
return shardedJedisPool;
} public JedisPool getSingleJedisPool() {
if (jedisPool == null) {
synchronized(RedisClientUtil.class) {
if (jedisPool == null) {
return getJedisPool();
}
}
}
return jedisPool;
} @Bean(name="jedis")
public Jedis getJedis() {
return getSingleJedisPool().getResource();
} // @Bean(name="shardedJedis")
public ShardedJedis getShardedJedis() {
return shardedJedisPool.getResource();
}
}

4, 引入注值所需要的依赖和注解

pom.xml中

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

入口程序中, springboot环境

package com.iwhere.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.web.bind.annotation.RestController; import com.iwhere.learn.redis.java.RedisClientConfig;
import com.iwhere.learn.redis.java.RedisClientUtil; @RestController
@SpringBootApplication
@EnableConfigurationProperties
public class APP { public static void main(String[] args) {
SpringApplication.run(APP.class, args);
} }

在使用redis时, 就可以通过 @Autowired 进行注入了

系列原创, 转载请注明出处, 谢谢 @Wenbronk: http://www.cnblogs.com/wenbronk/p/6672054.html

redis-手写redis切片和非切片连接池并注入springboot中的更多相关文章

  1. C基础 带你手写 redis sds

    前言 - Simple Dynamic Strings  antirez 想统一 Redis,Disque,Hiredis 项目中 SDS 代码, 因此构建了这个项目 https://github.c ...

  2. C基础 带你手写 redis adlist 双向链表

    引言 - 导航栏目 有些朋友可能对 redis 充满着数不尽的求知欲, 也许是 redis 属于工作, 交流(面试)的大头戏, 不得不 ... 而自己当下对于 redis 只是停留在会用层面, 细节层 ...

  3. 手写redis的docker文件,通过docker-compose配置redis

    在前面一遍随笔,配置的是mysql主从的docker-compose配置.今天我们来学习配置编排容器redis. 准备环境: docker 18.06.1-ce docker-compose 1.23 ...

  4. 用C、python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群

    想没想过,自己写一个redis客户端,是不是很难呢? 其实,并不是特别难. 首先,要知道redis服务端用的通信协议,建议直接去官网看,博客啥的其实也是从官网摘抄的,或者从其他博客抄的(忽略). 协议 ...

  5. 手写redis客户端

    一.RESP通信协议 Redis Serialization Protocol (Redis序列化协议). 特点:容易实现.解析快.可读性强 以\r\n分割数据. 二.撸代码 package com. ...

  6. Java连接Redis,存储对象获取对象()byte和json),连接池

    Java连接Redis Jedis连接Redis,Lettuce连接Redis Jedis连接Redis 1. 创建maven项目 2. 引入依赖 <dependencies> <d ...

  7. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  8. C基础 带你手写 redis ae 事件驱动模型

    引言 - 整体认识 redis ae 事件驱动模型, 网上聊得很多. 但当你仔细看完一篇又一篇之后, 可能你看的很舒服, 但对于 作者为什么要这么写, 出发点, 好处, 缺点 ... 可能还是好模糊, ...

  9. 关于布隆过滤器,手写你真的知其原理吗?让我来带你手写redis布隆过滤器。

    说到布隆过滤器不得不提到,redis, redis作为现在主流的nosql数据库,备受瞩目:它的丰富的value类型,以及它的偏向计算向数据移动属性减少IO的成本问题.备受开发人员的青睐.通常我们使用 ...

随机推荐

  1. maven 学习:为什么要使用maven,maven使用过程中的一些参数

    Maven是一个基于Java平台的项目构建工具. 设计的出发点: 在进行软件开发的过程中,无论什么项目,采用何种技术,使用何种编程语言,我们要重复相同的开发步骤:编码,编译,测试,生成文档,打包发布. ...

  2. FreeBSD查看即时网络流量

    1.数据包 “netstat 1″一秒钟累计一次,”netstat 2″两秒钟累计一次.依此类推 2.查看网卡流量:”systat -if 1″每秒钟刷新一次,”systat -if 2″两秒钟刷新一 ...

  3. vc6.0 PK vs2010

    从VC++6.0不足看VisualC++2010新特性 说起VC,有人想到维生素C(维C),有人想到风险投资(venture capital), 程序员们尤其是做底层开发的程序员或老程序员们第一感觉肯 ...

  4. getpass

    getpass模块用于输入信息时不显示,比如输入密码时隐藏.getpass模块接收用户的输入的数据类型是str类型. #!/usr/bin/env python #-*- coding: utf-8 ...

  5. [ACM_数据结构] POJ2352 [树状数组稍微变形]

    Description Astronomers often examine star maps where stars are represented by points on a plane and ...

  6. 使用base64转码的方式上传图片

    1.前端html代码 <input style="width:100%" onchange="loadpicture(1)" type="fil ...

  7. win10 打开sql server配置管理器

    win10 安装 sql server之后无法在开始菜单找到“sql server 配置管理器(SQL server configuration manager 1)在开始菜单中,无法找到 配置管理器 ...

  8. MVVM Light 新手入门(2) :ViewModel / Model 中定义“属性” ,并在View中调用

    今天学习MVVM架构中“属性”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华的利刃 MVVMLight系列. 一个窗口的基本模型如下: View(视图) -> ViewModel ...

  9. 配置阿里yum源,设置命令

    配置阿里yum源 #linux的软件包管理 安装 软件的方式有三种 .源代码编译安装() .下载python3的源代码 .解压缩源代码 .进入源代码目录,开始编译安装 .配置环境变量 .yum方式安装 ...

  10. flask源码解析之session

    内容回顾 cookie与session的区别: 1. session 是保存在服务端的键值对 2. cookie 只能保存4096个字节的数据,但是session不受限制 3. cookie保存在浏览 ...