redis入门——Spring整合篇
redis入门——Spring整合篇
@(Redis)[服务器, 连接池, 集群, jedis, spring]
- redis入门Spring整合篇
- Spring整合Redis
- redis整合分析
- 编写RedisUtils接口
- 编写RedisUtils实现类
- 单机版
- 集群版
- 配置Spring管理Redis
- 添加redisproperties
- redis用作缓存
- 添加缓存的步骤
- 添加缓存的原则
- Spring整合Redis
Spring整合Redis
redis整合分析
因为集群需要的服务器至少是6
台,使用Redis
集群的成本很高,所以如果没有业务要求,不会使用Redis
集群。
而使用Redis
集群的公司,为了节省成本,一般只会在生产环境使用集群,而开发环境使用Redis
单机版,所以我们在整合项目的时候,单机版和集群版都要有。
我们可以创建一个接口,再编写单机版和集群版的实现类,使用spring
进行管理,在部署时,使用哪种Redis
,就切换那种实现类。
编写RedisUtils接口
package com.pc.redis;/*** Redis工具接口* * @author Switch* @data 2017年2月11日* @version V1.0*/
public interface RedisUtils {/*** 保存* * @param key* 键* @param value* zhi*/public void set(String key, String value);/*** 保存并设置生存时间* * @param key* 键* @param value* 值* @param seconds* 时间,秒s为单位*/public void set(String key, String value, Integer seconds);/*** 根据key查询* * @param key* 键* @return 值*/public String get(String key);/*** 删除* * @param key* 键*/public void del(String key);/*** 根据key设置生存时间* * @param key* 键* @param seconds* 时间,秒s为单位*/public void expire(String key, Integer seconds);/*** value加一<br/>* 注意key必须是整型* * @param key* 键* @return 加一后的结果*/public Long incr(String key);
}
编写RedisUtils实现类
单机版
package com.pc.redis.impl;import org.springframework.beans.factory.annotation.Autowired;import com.pc.redis.RedisUtils;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;/*** Redis连接池工具类* * @author Switch* @data 2017年2月11日* @version V1.0*/
public class RedisPool implements RedisUtils {@Autowiredprivate JedisPool jedisPool;@Overridepublic void set(String key, String value) {Jedis jedis = this.getJedis();jedis.set(key, value);this.releaseJedis(jedis);}@Overridepublic void set(String key, String value, Integer seconds) {Jedis jedis = this.getJedis();jedis.set(key, value);jedis.expire(key, seconds);this.releaseJedis(jedis);}@Overridepublic String get(String key) {Jedis jedis = this.getJedis();String result = jedis.get(key);this.releaseJedis(jedis);return result;}@Overridepublic void del(String key) {Jedis jedis = this.getJedis();jedis.del(key);this.releaseJedis(jedis);}@Overridepublic void expire(String key, Integer seconds) {Jedis jedis = this.getJedis();jedis.expire(key, seconds);this.releaseJedis(jedis);}@Overridepublic Long incr(String key) {Jedis jedis = this.getJedis();Long count = jedis.incr(key);this.releaseJedis(jedis);return count;}/*** 获取Jedis连接* * @return Jedis连接*/public Jedis getJedis() {return this.jedisPool.getResource();}/*** 释放Jedis连接* * @param jedis* jedis连接*/public void releaseJedis(Jedis jedis) {jedis.close();}
}
集群版
package com.pc.redis.impl;import org.springframework.beans.factory.annotation.Autowired;import com.pc.redis.RedisUtils;import redis.clients.jedis.JedisCluster;/*** Redis集群工具类* * @author Switch* @data 2017年2月11日* @version V1.0*/
public class RedisCluster implements RedisUtils {@Autowiredprivate JedisCluster jedisCluster;@Overridepublic void set(String key, String value) {this.jedisCluster.set(key, value);}@Overridepublic void set(String key, String value, Integer seconds) {this.jedisCluster.set(key, value);this.jedisCluster.expire(key, seconds);}@Overridepublic String get(String key) {return this.jedisCluster.get(key);}@Overridepublic void del(String key) {this.jedisCluster.del(key);}@Overridepublic void expire(String key, Integer seconds) {this.jedisCluster.expire(key, seconds);}@Overridepublic Long incr(String key) {return this.jedisCluster.incr(key);}/*** 获取JedisCluster对象<br/>* 可以直接使用它来进行redis操作* * @return JedisCluster对象*/public JedisCluster getJedisCluster() {return jedisCluster;}
}
配置Spring管理Redis
创建applicationContext-redis.xml
一般来书,spring
配置文件分类之后,会将下面的配置放在applicationContext-dao.xml
配置文件中。
<!-- 配置 读取properties文件 -->
<context:property-placeholder location="classpath:resource/*.properties" />
注意:使用的时候开启一个配置即可。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 两种方案:使用jedis连接池(单机版)和jedis集群 --><!-- 一般生产环境使用集群,开发环境使用单机版 --><!-- 使用哪种,可以将另一种注释掉 --><!-- 注意:如果在注入工具类的时候是按类型注入的话,那么不使用的工具类必须注释掉--><!-- 单机版 --><!-- 配置jedis连接池 --><bean class="redis.clients.jedis.JedisPool"><constructor-arg name="host" value="${redis.host}" /><constructor-arg name="port" value="${redis.port}" /></bean><!-- 配置单机版工具类 --><bean class="com.pc.redis.impl.RedisPool" /><!-- 集群版 --><!-- 配置jedis集群 --><bean class="redis.clients.jedis.JedisCluster"><constructor-arg name="nodes"><set><bean class="redis.clients.jedis.HostAndPort"><constructor-arg name="host" value="${cluster.host1}" /><constructor-arg name="port" value="${cluster.port1}" /></bean><bean class="redis.clients.jedis.HostAndPort"><constructor-arg name="host" value="${cluster.host2}" /><constructor-arg name="port" value="${cluster.port2}" /></bean><bean class="redis.clients.jedis.HostAndPort"><constructor-arg name="host" value="${cluster.host3}" /><constructor-arg name="port" value="${cluster.port3}" /></bean><bean class="redis.clients.jedis.HostAndPort"><constructor-arg name="host" value="${cluster.host4}" /><constructor-arg name="port" value="${cluster.port4}" /></bean><bean class="redis.clients.jedis.HostAndPort"><constructor-arg name="host" value="${cluster.host5}" /><constructor-arg name="port" value="${cluster.port5}" /></bean><bean class="redis.clients.jedis.HostAndPort"><constructor-arg name="host" value="${cluster.host6}" /><constructor-arg name="port" value="${cluster.port6}" /></bean></set></constructor-arg></bean><!-- 配置集群版工具类 --><bean class="com.pc.redis.impl.RedisCluster" />
</beans>
添加redis.properties
#redis单机版信息
redis.host=192.168.37.131
redis.port=6379#redis集群版信息
cluster.host1=192.168.37.131
cluster.port1=7001cluster.host2=192.168.37.131
cluster.port2=7002cluster.host3=192.168.37.131
cluster.port3=7003cluster.host4=192.168.37.131
cluster.port4=7004cluster.host5=192.168.37.131
cluster.port5=7005cluster.host6=192.168.37.131
cluster.port6=7006
redis用作缓存
添加缓存的步骤
- 从缓存中命中
- 没有命中执行原有逻辑,从数据库
MySQL
中查询 - 把数据保存在
redis
中
添加缓存的原则
不能够影响正常的业务逻辑,可以进行try/catch
package com.pc.test;import org.springframework.beans.factory.annotation.Autowired;import com.pc.redis.RedisUtils;/*** 缓存测试类* * @author Switch* @data 2017年2月11日* @version V1.0*/
public class RedisCacheTest {// 注入Redis工具类@Autowiredprivate RedisUtils redisUtils;@Overridepublic String queryByRedis() {String key = "redis";// 1.从缓存中命中try {String redisJson = redisUtils.get(key);if (StringUtils.isNotBlank(redisJson)) {return redisJson;}} catch (Exception e) {e.printStackTrace();}// 2.如果没用命中,执行原有逻辑,从数据库中获取数据// 未实现,从数据库中获取数据String json = getFromDB();// 3.将查询出来的结果加入缓存try {this.redisUtils.set(key, json);this.redisUtils.expire(key, 60 * 60 * 24);} catch (Exception e) {e.printStackTrace();}return json;}
}
redis入门——Spring整合篇相关推荐
- 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有
文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...
- redis入门——集群篇
redis入门--集群篇 @(Redis)[服务器, 集群, 主从复制, jedis] redis入门集群篇 主从复制 基本介绍 主从配置 主redis配置 从redis配置 Redis集群 基本介绍 ...
- redis安装,redis项目以来,redis和spring整合,redis的service,redis的service实现类
一.redis安装: Redis-3.2.6.tar.gz安装,参考方式: (这里也可以用于安装redis-4.0.9.tar.gz : wget http://download.redis. ...
- Redis 入门看这篇就够了
曾经并肩往前的伙伴,在举杯祝福后都走散! 一.引言 为啥需要redis?没有reids有啥问题?↓ 1.1 数据库压力过大 由于用户量增大,请求数量也随之增大,数据压力过大 1.2 数据不同步 多台服 ...
- redis于spring整合之RedisTemplate
原文地址: http://www.jianshu.com/p/7bf5dc61ca06 转载于:https://www.cnblogs.com/asderx/p/7647022.html
- spring整合mongoDB 和 Redis 极简入门
mongoDB 简介 文档Document 存储型 MongoDB 图形关系存储型 Neo4j 键值对存储redis docker run -d -p 27017:27017 mongo 面向对象的思 ...
- Spring Boot Redis 入门
本文,我们基于 Spring Boot 2.X 版本. 1. 概述 在快速入门 Spring Boot 整合 Redis 之前,我们先来做个简单的了解.在 Spring 的生态中,我们使用 Sprin ...
- Redis入门篇(安装与启动)
Redis入门篇(安装与启动) 一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Onl ...
- Redis学习笔记①基础篇_Redis快速入门
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...
最新文章
- 在CentOS 6.8 x86_64上安装nginx 1.10.3
- 多线程:happens-before原则
- C#实现的三种方式实现模拟键盘按键
- 反汇编学习笔记2 函数的本质
- 【设计】线框图、原型和视觉稿的区别
- 基于Linux和MiniGUI的嵌入式系统软件开发指南(四)
- 阿里安全的“自动逆向机器人”TimePlayer 究竟是什么
- 我的大学生涯软件工程一年半
- 计算机硬盘数据清零,如何完全清除硬盘数据,使其永不恢复
- 【Designing ML Systems】第 6 章 :模型开发和离线评估
- 简单实验uwsgi+flask 部署caffe模型
- 终于搞清楚了:happen-before原则是干什么的
- 【Python爬虫_1】爬取巴比特社区前5页列表和内容;
- 数据库事务和范式理解
- 基于Java+Swing+Mysql员工信息管理系统
- 分享几套免费漫画字体和卡通字体
- Java 实现分页功能
- 如何彻底的卸载干净Oracle 11g
- 关于STC单片机的远程升级
- 王万生计算机组成原理第三版,王万生《计算机组成原理》清华大学出版社完整答案...