redis入门——Spring整合篇

@(Redis)[服务器, 连接池, 集群, jedis, spring]

  • redis入门Spring整合篇

    • Spring整合Redis

      • redis整合分析
      • 编写RedisUtils接口
      • 编写RedisUtils实现类
        • 单机版
        • 集群版
      • 配置Spring管理Redis
      • 添加redisproperties
      • 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用作缓存

添加缓存的步骤

  1. 从缓存中命中
  2. 没有命中执行原有逻辑,从数据库MySQL中查询
  3. 把数据保存在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整合篇相关推荐

  1. 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有

    文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...

  2. redis入门——集群篇

    redis入门--集群篇 @(Redis)[服务器, 集群, 主从复制, jedis] redis入门集群篇 主从复制 基本介绍 主从配置 主redis配置 从redis配置 Redis集群 基本介绍 ...

  3. 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. ...

  4. Redis 入门看这篇就够了

    曾经并肩往前的伙伴,在举杯祝福后都走散! 一.引言 为啥需要redis?没有reids有啥问题?↓ 1.1 数据库压力过大 由于用户量增大,请求数量也随之增大,数据压力过大 1.2 数据不同步 多台服 ...

  5. redis于spring整合之RedisTemplate

    原文地址: http://www.jianshu.com/p/7bf5dc61ca06 转载于:https://www.cnblogs.com/asderx/p/7647022.html

  6. spring整合mongoDB 和 Redis 极简入门

    mongoDB 简介 文档Document 存储型 MongoDB 图形关系存储型 Neo4j 键值对存储redis docker run -d -p 27017:27017 mongo 面向对象的思 ...

  7. Spring Boot Redis 入门

    本文,我们基于 Spring Boot 2.X 版本. 1. 概述 在快速入门 Spring Boot 整合 Redis 之前,我们先来做个简单的了解.在 Spring 的生态中,我们使用 Sprin ...

  8. Redis入门篇(安装与启动)

    Redis入门篇(安装与启动) 一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Onl ...

  9. Redis学习笔记①基础篇_Redis快速入门

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

最新文章

  1. 在CentOS 6.8 x86_64上安装nginx 1.10.3
  2. 多线程:happens-before原则
  3. C#实现的三种方式实现模拟键盘按键
  4. 反汇编学习笔记2 函数的本质
  5. 【设计】线框图、原型和视觉稿的区别
  6. 基于Linux和MiniGUI的嵌入式系统软件开发指南(四)
  7. 阿里安全的“自动逆向机器人”TimePlayer 究竟是什么
  8. 我的大学生涯软件工程一年半
  9. 计算机硬盘数据清零,如何完全清除硬盘数据,使其永不恢复
  10. 【Designing ML Systems】第 6 章 :模型开发和离线评估
  11. 简单实验uwsgi+flask 部署caffe模型
  12. 终于搞清楚了:happen-before原则是干什么的
  13. 【Python爬虫_1】爬取巴比特社区前5页列表和内容;
  14. 数据库事务和范式理解
  15. 基于Java+Swing+Mysql员工信息管理系统
  16. 分享几套免费漫画字体和卡通字体
  17. Java 实现分页功能
  18. 如何彻底的卸载干净Oracle 11g
  19. 关于STC单片机的远程升级
  20. 王万生计算机组成原理第三版,王万生《计算机组成原理》清华大学出版社完整答案...

热门文章

  1. 用户与组管理,磁盘管理
  2. linux服务器 top 查看 内存占用详情
  3. python交换两个变量的值
  4. 微信支付开放平台_有了开放数据,您终于可以得到这些年来所支付的费用
  5. Java 统计字母个数
  6. k2pdfopt教程
  7. Linux(ubuntu)——FTP服务器
  8. shell编程之进阶篇一表达式
  9. 使用urllib2库实现有道翻译
  10. Table表格横竖线实现Css