Spring redis 分布式缓存详细说明、配置、

来源:互联网 发布:ubuntu autotools 编辑:程序博客网 时间:2024/06/12 19:58

缓存技术的应用应该算是一个热门的话题。在很多互联网项目建设中,缓存的应用比不可少。在很大的程度上减轻了关系型数据库的压力,提升系统性能。

那么什么是redis?

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 


redis的特点与优势是什么?

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • Redis支持数据的备份,即master-slave模式的数据备份。

对redis有了初步了解之后,我们该如何应用。首先在windows系统搭建redis数据库
第一步:下载redis数据库安装包 地址:https://git.oschina.net/JornTang/spring-redisFenBuShiHuanCunZhengHe.git 选择redis.zip
第二步:解压redis.zip 打开docs命令行进入redis的安装路径执行命令redis-server.exe  redis.windows.conf
PS:第一次启动有可能会报错[2368] 21 Apr 02:57:05.611 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
解决方法:在命令行中运行
redis-cli.exe127.0.0.1:6379>shutdown
not connected>exit

安装redis客户端
第一步:下载redis数据库安装包client地址:http://download.csdn.net/download/li295214001/9398955

测试redis数据库是否安装成功

基本环境搭建完成,接下来看看如何集成与应用
pom.xml配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>com.spring.redis</groupId>
  <artifactId>spring-redis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>


  <name>spring-redis</name>
  <url>http://maven.apache.org</url>


  <!-- 定义属性 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.6.RELEASE</spring.version>
<spring.security.version>4.0.4.RELEASE</spring.security.version>
<spring.security.oauth.version>2.0.7.RELEASE</spring.security.oauth.version>
<fasterxml.jackson.version>2.5.4</fasterxml.jackson.version>
<aspectj.version>1.8.6</aspectj.version>  
  </properties>


  <dependencies>
  <!-- 引入谷歌集合库 -->
  <dependency>
  <groupId>com.google.collections</groupId>
  <artifactId>google-collections</artifactId>
  <version>1.0</version>
</dependency>
  <dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.2.1</version>
</dependency>
<!-- 单元测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- Jedis -->
    <dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
 <version>2.9.0</version>
   </dependency> 
   <!-- spring --> 
   <dependency>  
      <groupId>org.springframework</groupId>  
      <artifactId>spring-core</artifactId>  
      <version>${spring.version}</version>  
    </dependency>  
        <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-beans</artifactId>  
        <version>${spring.version}</version>  
    </dependency> 
        <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-context</artifactId>  
        <version>${spring.version}</version>  
    </dependency> 
    <!-- log4j -->
    <dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.5</version>
  <scope>compile</scope>
   </dependency> 
   <dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>1.2.14</version>
 <scope>compile</scope>
  </dependency>         
  <dependency>
 <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>1.2</version>
  </dependency>
  </dependencies>
</project>
在看看spring.xml配置
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  

<!-- 引入属性文件 -->
    <context:property-placeholder location="classpath:redis.properties" /> 
    <!-- 配置扫描路径 --> 
    <context:component-scan base-package="com.spring.redis"></context:component-scan>
    <!-- 工具类定义 -->
    <bean class="com.spring.redis.util.SpringContextUtil"></bean>
    <bean class="com.spring.redis.util.SpringConfigurerUtil"></bean>
    
    <!-- 配置redis数据库连接池 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="300" /> <!-- 最大能够保持idel状态的对象数  -->
        <property name="maxTotal" value="60000" /> <!-- 最大分配的对象数 -->
        <property name="testOnBorrow" value="true" /> <!-- 当调用borrow Object方法时,是否进行有效性检查 -->
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
<!--         <property name="maxActive" value="${redis.maxActive}" /> -->
<!--         <property name="maxIdle" value="${redis.maxIdle}" /> -->
<!--         <property name="testOnBorrow" value="${redis.testOnBorrow}"/> -->
<!--         <property name="testOnReturn" value="${redis.testOnReturn}"/> -->
        <!-- <property name="testWhileIdle" value="true"/> -->
    </bean>

<!-- jedis单件部署配置 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool"  scope="singleton">
<constructor-arg index="0" ref="jedisPoolConfig" />
<constructor-arg name="" value=""/>
</bean>

<!-- jedis集群部署配置 -->
    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"  scope="singleton">
        <constructor-arg index="0" ref="jedisPoolConfig" />
        <constructor-arg index="1">
            <list>
            <!-- 多节点则配置多个JedisShardInfo -->
                <bean class="redis.clients.jedis.JedisShardInfo">
                    <constructor-arg name="host" value="${redis.host}" />
                    <constructor-arg name="port" value="${redis.port}" />
                    <constructor-arg name="soTimeout" value="${redis.soTimeout}" />
                    <constructor-arg name="connectionTimeout" value="${redis.connectionTimeout}" />
                    <constructor-arg name="weight" value="1" />
                </bean>
            </list>
        </constructor-arg>
    </bean>
</beans>
以上就是所有的配置,配置非常简单
demo下载地址:https://git.oschina.net/JornTang/spring-redisFenBuShiHuanCunZhengHe.git
demo中各配置有详细的注释,包括单元测试

PS:配置JedisPool 参数值一定要加上type值,不然初始化报错

后续补上高级部分(备份、管道、分区、安全)

原创粉丝点击