spring boot整合memcache
1.导入memcached客户端jar包
<dependency>
<groupId>com.whalin</groupId>
<artifactId>Memcached-Java-Client</artifactId>
<version>3.0.2</version>
</dependency>
2.在application.yml设置memcache连接池配置属性值
memcache:
servers: 127.0.0.1:11211
failover: true
initConn: 100
minConn: 20
maxConn: 1000
maintSleep: 50
nagel: false
socketTO: 3000
aliveCheck: true
3.设置项目启动读取application.yml中memcache属性值
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component
@ConfigurationProperties(prefix = "memcache")
public class SockIOPoolConfig { private String[] servers; private Integer[] weights; private int initConn; private int minConn; private int maxConn; private long maintSleep; private boolean nagle; private int socketTO; public String[] getServers() {
return servers;
} public void setServers(String[] servers) {
this.servers = servers;
} public Integer[] getWeights() {
return weights;
} public void setWeights(Integer[] weights) {
this.weights = weights;
} public int getInitConn() {
return initConn;
} public void setInitConn(int initConn) {
this.initConn = initConn;
} public int getMinConn() {
return minConn;
} public void setMinConn(int minConn) {
this.minConn = minConn;
} public int getMaxConn() {
return maxConn;
} public void setMaxConn(int maxConn) {
this.maxConn = maxConn;
} public long getMaintSleep() {
return maintSleep;
} public void setMaintSleep(long maintSleep) {
this.maintSleep = maintSleep;
} public boolean isNagle() {
return nagle;
} public void setNagle(boolean nagle) {
this.nagle = nagle;
} public int getSocketTO() {
return socketTO;
} public void setSocketTO(int socketTO) {
this.socketTO = socketTO;
}
4.初始化memcache客户端
import com.idelan.iot.client.Memcache;
import com.whalin.MemCached.MemCachedClient;
import com.whalin.MemCached.SockIOPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class MemcacheConfig { @Autowired
private SockIOPoolConfig sockIOPoolConfig; @Bean
public SockIOPool sockIOPool(){ //获取连接池的实例
SockIOPool pool = SockIOPool.getInstance();
//服务器列表及其权重
String[] servers = sockIOPoolConfig.getServers();
Integer[] weights = sockIOPoolConfig.getWeights();
//设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);
//设置初始连接数、最小连接数、最大连接数、最大处理时间
pool.setInitConn(sockIOPoolConfig.getInitConn());
pool.setMinConn(sockIOPoolConfig.getMinConn());
pool.setMaxConn(sockIOPoolConfig.getMaxConn());
//设置连接池守护线程的睡眠时间
pool.setMaintSleep(sockIOPoolConfig.getMaintSleep());
//设置TCP参数,连接超时
pool.setNagle(sockIOPoolConfig.isNagle());
pool.setSocketConnectTO(sockIOPoolConfig.getSocketTO());
//初始化并启动连接池
pool.initialize();
return pool;
} @Bean
public Memcache memCachedClient(){
return new Memcache(new MemCachedClient());
}
5.编写Memcache类,实现memcache基本操作
import com.whalin.MemCached.MemCachedClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils; public class Memcache { private final static Logger logger = LoggerFactory.getLogger(Memcache.class); private MemCachedClient memCachedClient; public Memcache(MemCachedClient memCachedClient) {
this.memCachedClient = memCachedClient;
} /**
* 将netty客户端信息存入memcached
* @param obj
* @return
*/
public boolean addChannel(String key, Object obj) {
try {
if (obj == null) {
return false;
}
return memCachedClient.set(key, obj);
} catch (Exception e) {
logger.error("netty客户端插入memcache出错", e);
return false;
}
} /**
* 将netty客户端信息从memcached中移除
* @param key
* @return
*/
public boolean removeChannel(String key) {
try {
if (StringUtils.isEmpty(key)) {
return false;
} return memCachedClient.delete(key);
} catch (Exception e) {
logger.error("netty客户端移除memcache出错", e);
return false;
}
} /**
* 从memcache中获取netty客户端
* @param key
* @return
*/
public Object getChannel(String key) {
try {
if (StringUtils.isEmpty(key)) {
return null;
}
return memCachedClient.get(key);
} catch (Exception e) {
logger.error("从memcache中获取客户端出错", e);
return null;
}
} /**
* 检测memcache中设备是否登录过
* @param key
* @return
*/
public boolean exist(String key) {
try {
if (StringUtils.isEmpty(key)) {
return false;
} return memCachedClient.keyExists(key);
} catch (Exception e) {
logger.error("检测memcache中是否存在某个设备出错", e);
return false;
}
}
6.方法调用
@Autowired
private Memcache memcache;
通过@Autowired注入Memcache类来调用memcach方法
spring boot整合memcache的更多相关文章
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- spring boot整合jsp的那些坑(spring boot 学习笔记之三)
Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency> <groupId>or ...
- spring boot 系列之四:spring boot 整合JPA
上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...
- Spring Kafka和Spring Boot整合实现消息发送与消费简单案例
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...
- Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...
- spring boot整合Hadoop
最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...
- Spring Boot整合Elasticsearch
Spring Boot整合Elasticsearch Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...
- spring boot 整合 百度ueditor富文本
百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...
- spring boot 整合quartz ,job不能注入的问题
在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...
随机推荐
- Kafka(五) —— Kafka源码本地调试
搭建环境 安装scala 安装gradle 在kafka源码的根目录执行命令 gradle wrapper gradle idea 打开IDEA,File -> Open -> kafka ...
- SSH免密码登陆详解
为了更好的理解SSH免密码登陆原理,我们先来说说SSH的安全验证,SSH采用的是”非对称密钥系统”,即耳熟能详的公钥私钥加密系统,其安全验证又分为两种级别. 1. 基于口令的安全验证 这种方式使用用户 ...
- WAIC | 奇点云携「酷炫AI应用」亮相2019世界人工智能大会
你是否还在疑惑“人工智能可否改变世界?” 那么,你该有一些危机感了. 机器视觉.自然语言处理.智能语音.机器人问诊.智慧驾驶……这些AI技术及应用早已渗入了我们日常生活的点滴. 29日,以「智联世界, ...
- CSS性能优化探讨
大部分前端开发人员都不关心CSS性能优化,其实对于一个复杂的页面来说,高效的选择器还是可以带来一定的性能提升的. 1. CSS 选择器 浏览器是“从右往左”来分析 class 的,它的匹配规则是从右向 ...
- 查看python版本和django版本
python --version 在python shell中: import sys sys.version import django django.VERSION
- vue项目实例-常用标签
感谢:https://www.jianshu.com/p/5d9b341d650f 总结: 1.<router-link to=''>主要实现跳转链接功能,属性to='/'即是跳转到pat ...
- Python 搭建webdriver环境遇到的问题总结
安装过程是参考<selenium2Python自动化测试实战>中Pythonwebdriver环境搭建章节 在安装过程中,遇到了一些问题,总结一下,为日后自己再遇到相同问题做个笔记以便查看 ...
- python登陆接口编写
#coding:utf-8 import getpass,sys i=0 j=0 while i<3: username=raw_input('username:') #输入用户名 life_1 ...
- 从一道网易面试题浅谈 Tagged Pointer - darcy_tang 的博客
前言 这篇博客九月就想写了,因为赶项目拖了到现在,抓住17年尾巴写吧~ 正文 上次看了一篇 <从一道网易面试题浅谈OC线程安全> 的博客,主要内容是: 作者去网易面试,面试官出了一道面试题 ...
- 漫说测试 | 研发虐我千百遍,我待bug如初恋
的行业之一他们的运筹帷幄,他们的勾心斗角,只有自己知道.000,但绝对也是最枯燥的行业之一! IT可能是几个最高薪行业之一,但同时也绝对是最辛苦的行业之一!IT业是最需要创新能力的行业之一,但绝对也是 ...