Java项目集成Redis
1.项目pom.xml中添加Jedis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2.项目application.properties中添加Redis配置信息
# Redis 相关配置
redis.host=127.0.0.1
redis.port=6379
redis.password=112233
redis.timeout=300
redis.poolMaxTotal=10
redis.poolMaxIdle=10
redis.poolMaxWait=3
3.com.xxx.redis包:
①RedisConfig类:读取配置文件中的Redis配置信息
@Component
@ConfigurationProperties(prefix="redis")
public class RedisConfig { private String host;
private int port;
//秒
private int timeout;
private String password;
private int poolMaxTotal;
private int poolMaxIdle;
//秒
private int poolMaxWait; public String getHost() {
return host;
} public void setHost(String host) {
this.host = host;
} public int getPort() {
return port;
} public void setPort(int port) {
this.port = port;
} public int getTimeout() {
return timeout;
} public void setTimeout(int timeout) {
this.timeout = timeout;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getPoolMaxTotal() {
return poolMaxTotal;
} public void setPoolMaxTotal(int poolMaxTotal) {
this.poolMaxTotal = poolMaxTotal;
} public int getPoolMaxIdle() {
return poolMaxIdle;
} public void setPoolMaxIdle(int poolMaxIdle) {
this.poolMaxIdle = poolMaxIdle;
} public int getPoolMaxWait() {
return poolMaxWait;
} public void setPoolMaxWait(int poolMaxWait) {
this.poolMaxWait = poolMaxWait;
}
}
②RedisPoolFactory类:通过JedisPool的构造方法及配置参数,获取JedisPool
@Service
public class RedisPoolFactory { @Autowired
private RedisConfig redisConfig; /**
* 获得的JedisPool注入Spring的容器中
* @return
*/
@Bean
public JedisPool jedisPoolFactory() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());
jedisPoolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());
jedisPoolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000); JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig.getHost(),
redisConfig.getPort(), redisConfig.getTimeout(), redisConfig.getPassword(), 0); return jedisPool;
}
③KeyPrefix类:定义各个对象存储在Redis中的key的前缀
public interface KeyPrefix {
public int expireSeconds();
public String getPrefix();
}
public abstract class BasePrefix implements KeyPrefix{
private int expireSeconds;
private String prefix;
//0代表永不过期
public BasePrefix(String prefix) {
this(0,prefix);
}
public BasePrefix(int expireSeconds, String prefix) {
this.expireSeconds = expireSeconds;
this.prefix = prefix;
}
@Override
public int expireSeconds(){
return expireSeconds;
}
@Override
public String getPrefix(){
String className = getClass().getSimpleName();
return className+":" + prefix;
}
}
public class UserKey extends BasePrefix{
/**
* 父类构造方法
* @param prefix
*/
private UserKey(String prefix) {
super(prefix);
}
private UserKey(int expireSeconds, String prefix) {
super(expireSeconds, prefix);
}
public static UserKey getById = new UserKey(30, "id");
public static UserKey getByName = new UserKey(30, "name");
}
④RedisService类:通过JedisPool获取Jedis;通过Jedis客户端处理缓存数据
@Service
public class RedisService { @Autowired
private RedisPoolFactory redisPoolFactory; /**
* 获取对象
* @param key
* @param clazz
* @param <T>
* @return
*/
public <T> T getRedis(KeyPrefix prefix,String key, Class<T> clazz) { JedisPool jedisPool = redisPoolFactory.jedisPoolFactory();
Jedis jedis = null;
try{
jedis = jedisPool.getResource(); String realKey = prefix.getPrefix() + key;
String value = jedis.get(realKey);
T realValue = stringToBean(value,clazz);
return realValue;
}finally{
returnToPool(jedis);
} } public <T> boolean setRedis(KeyPrefix prefix,String key, T value) { JedisPool jedisPool = redisPoolFactory.jedisPoolFactory();
Jedis jedis = null;
try{
jedis = jedisPool.getResource(); String valueStr = beanToString(value); String realKey = prefix.getPrefix() + key; if(valueStr == null || valueStr.length() <= 0) {
return false;
}
jedis.set(realKey, valueStr); return true;
}finally{
returnToPool(jedis);
} } /**
* 删除
* */
public boolean delete(KeyPrefix prefix, String key) {
JedisPool jedisPool = redisPoolFactory.jedisPoolFactory();
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
//生成真正的key
String realKey = prefix.getPrefix() + key;
long ret = jedis.del(realKey);
return ret > 0;
}finally {
returnToPool(jedis);
}
} /**
* 增加值
* */
public <T> Long incr(KeyPrefix prefix, String key) {
JedisPool jedisPool = redisPoolFactory.jedisPoolFactory();
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
//生成真正的key
String realKey = prefix.getPrefix() + key;
return jedis.incr(realKey);
}finally {
returnToPool(jedis);
}
} private void returnToPool(Jedis jedis){
if(null != jedis){
jedis.close();
}
} public static <T> String beanToString(T value) {
if(value == null) {
return null;
}
Class<?> clazz = value.getClass();
if(clazz == int.class || clazz == Integer.class) {
return ""+value;
}else if(clazz == String.class) {
return (String)value;
}else if(clazz == long.class || clazz == Long.class) {
return ""+value;
}else {
return JSON.toJSONString(value);
}
} @SuppressWarnings("unchecked")
public static <T> T stringToBean(String str, Class<T> clazz) {
if(str == null || str.length() <= 0 || clazz == null) {
return null;
}
if(clazz == int.class || clazz == Integer.class) {
return (T)Integer.valueOf(str);
}else if(clazz == String.class) {
return (T)str;
}else if(clazz == long.class || clazz == Long.class) {
return (T)Long.valueOf(str);
}else {
return JSON.toJavaObject(JSON.parseObject(str), clazz);
}
}
}
4. 控制层:连接Redis服务器,测试
1 /**
* 获取用户
* 测试Redis服务
* @return
*/
@RequestMapping("/testRedisGet")
@ResponseBody
public Result<User> testRedis(@RequestParam("id") int id){ User user = redisService.getRedis(UserKey.getById,id + "", User.class); return Result.success(user);
} //写入Redis
@RequestMapping("/testRedisSet")
@ResponseBody
public Result<User> testRedisSet(@RequestParam("id") int id,
@RequestParam("name") String name){ User user = new User();
user.setId(id);
user.setName(name);
redisService.setRedis(UserKey.getById,id + "", user); return Result.success(user);
}
Java项目集成Redis的更多相关文章
- Spring Boot 项目集成Redis
目录 集成方式 使用Jedis 使用spring-data-redis Redis的安装 绑定配置 获取Redis客户端 Redis工具的编写 使用 集成方式 使用Jedis Jedis是Redis官 ...
- Java项目配置redis
成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...
- SpringBoot项目集成Redis
一.在pom文件中添加依赖 <!-- 集成redis --> <dependency> <groupId>org.springframework.boot</ ...
- 谷粒 | 项目集成redis
添加依赖 由于redis缓存是公共应用,所以我们把依赖与配置添加到了common模块下面,在common模块pom.xml下添加以下依赖 <!-- redis --> <depend ...
- Java项目集成SAP BO
SAP BO报表查看需要登录SAP BO系统,为了方便公司希望将BO报表集成到OA系统中,所以参考网上资料加上与SAP BO的顾问咨询整理出一套通过Java来集成SAP BO的功能. SAPBO中的报 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Spring Boot集成Redis集群(Cluster模式)
目录 集成jedis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 集成spring-data-redis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 异常处理 同样的, ...
- Spring Boot 项目实战(四)集成 Redis
一.前言 上篇介绍了接口文档工具 Swagger 及项目监控工具 JavaMelody 的集成过程,使项目更加健壮.在 JAVA Web 项目某些场景中,我们需要用缓存解决如热点数据访问的性能问题,业 ...
- redis在java项目中的使用
在上一篇文章中已经讲了redis的spring配置,这篇将会描述redis在java项目中的使用. redis存储形式都是key-value(键值对),按照存储的内容分为两种,一种是存简单数据,即数字 ...
随机推荐
- 用 HTML5 造个有诚意的 23D 招聘稿
前言 招聘对于一个公司来说是相当重要的一个环节,首先它影响着公司未来发展的趋势,其次它为公司注入新鲜血液,使公司更具有活力.当然在工业互联网,物联网大背景下诞生的 HT 也是需要注入新鲜的血液来进一步 ...
- 微服务优化之使用gRPC做微服务的内部通信
使用gRPC做微服务的内部通信 gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性. 大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSO ...
- 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)
数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...
- Java自学路线图之Java框架自学
Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...
- Python中使用os模块执行远程命令
1. 使用os模块远程执行命令 服务端代码 1 import socket 2 import os 3 4 sh_server = socket.socket() #创建一个socket对象 5 sh ...
- 为Python安装pip
Python及操作系统的支持 Python 2.6, 2.7, 3.2, 3.3, 3.4 Unix/Linux, OS X, 以及 Windows 默认包含 Python 2.7.9 及以后的版 ...
- Chrome开发者工具之测试应用
一.Chrome开发者工具简介 浏览器的开发者工具(DevTools)可以帮助开发人员对网页进行布局,比如HTML+CSS,帮助前端工程师更好的调试脚本(JavaScript.jQuery)之类的,还 ...
- [Linux][C][gcc] Linux GCC 编译链接 报错ex: ./libxxx.so: undefined reference to `shm_open'
本人原创文章,文章是在此代码github/note的基础上进行补充,转载请注明出处:https://github.com/dramalife/note. 以librt丶用户自定义动态库libxxx 和 ...
- MySQL笔记(5)-- SQL执行流程,MySQL体系结构
MySQL的体系结构,可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程:Server层包括连接层.查询缓存.分析器.优化器.执行器等,涵盖MySQL的大多数核心服务功能,以及所有 ...
- 【Springboot】用Prometheus+Grafana监控Springboot应用
1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...