検索
ホームページJava&#&チュートリアルJava での SSM と Redis の統合の詳細な説明

Java での SSM と Redis の統合の詳細な説明

Sep 30, 2017 am 10:31 AM
javaredis詳しい説明

Java での SSM と Redis の統合の詳細な説明

Redisのインストールと使用

最初のステップはもちろんRedisをインストールすることです。ここでは例としてRedisをインストールします。

  • 最初に Redis をダウンロードします。msi または zip パッケージのインストール方法を選択できます

  • zip 方法では、cmd ウィンドウを開き、解凍されたディレクトリで redis-server redis.windows.conf を実行する必要がありますRedis を起動するにはredis-server redis.windows.conf启动Redis

  • 采用msi方式安装后Redis默认启动,不需要进行任何配置

  • 可以在redis.windows.conf文件中修改Redis端口号、密码等配置,修改完成后使用redis-server redis.windows.conf命令重新启动

  • 在Redis安装目录下执行redis-cli -h 127.0.0.1 -p 6379 -a 密码打开Redis操作界面

  • 如果报错(error) ERR operation not permitted,使用auth 密码进行验证

SSM整合Redis

这里直接在上一篇SSM之框架整合的基础上进行Redis整合,这里需要注意,存入Redis的pojo类必须实现Serializable接口

配置pom.xml引入Redis依赖


<!--redis--><dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.6.1.RELEASE</version></dependency><dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.3</version></dependency>

redis.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=redis
redis.maxIdle=100
redis.maxWait=1000
redis.testOnBorrow=true
redis.timeout=100000
defaultCacheExpireTime=3600

applicationContext-redis.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:mvc="http://www.springframework.org/schema/mvc"       
xmlns:context="http://www.springframework.org/schema/context"       
xmlns:aop="http://www.springframework.org/schema/aop"       
xmlns:tx="http://www.springframework.org/schema/tx"       
xsi:schemaLocation="http://www.springframework.org/schema/beans        
http://www.springframework.org/schema/beans/spring-beans.xsd        
http://www.springframework.org/schema/mvc        
http://www.springframework.org/schema/mvc/spring-mvc.xsd        
http://www.springframework.org/schema/context        
http://www.springframework.org/schema/context/spring-context.xsd        
http://www.springframework.org/schema/aop        
http://www.springframework.org/schema/aop/spring-aop.xsd        
http://www.springframework.org/schema/tx        
http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--引入Redis配置文件-->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:redis.properties</value>
            </list>
        </property>
    </bean>

    <!-- jedis 连接池配置 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="maxWaitMillis" value="${redis.maxWait}"/>
        <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
    </bean>
    <!-- redis连接工厂 -->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="poolConfig" ref="poolConfig"/>
        <property name="port" value="${redis.port}"/>
        <property name="hostName" value="${redis.host}"/>
        <property name="password" value="${redis.password}"/>
        <property name="timeout" value="${redis.timeout}"></property>
    </bean>
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
        </property>
    </bean>
    <!-- 缓存拦截器配置 -->
    <bean id="methodCacheInterceptor" class="com.zkh.interceptor.MethodCacheInterceptor">
        <property name="redisUtil" ref="redisUtil"/>
        <property name="defaultCacheExpireTime" value="${defaultCacheExpireTime}"/>
        <!-- 禁用缓存的类名列表 -->
        <property name="targetNamesList">
            <list>
                <value></value>
            </list>
        </property>
        <!-- 禁用缓存的方法名列表 -->
        <property name="methodNamesList">
            <list>
                <value></value>
            </list>
        </property>
    </bean>
    <bean id="redisUtil" class="com.zkh.util.RedisUtil">
        <property name="redisTemplate" ref="redisTemplate"/>
    </bean>
    <!--配置切面拦截方法 -->
    <aop:config proxy-target-class="true">
        <aop:pointcut id="controllerMethodPointcut" expression="        
        execution(* com.zkh.service.impl.*.select*(..))"/>
        <aop:advisor advice-ref="methodCacheInterceptor" pointcut-ref="controllerMethodPointcut"/>
    </aop:config></beans>

MethodCacheInterceptor.java


package com.zkh.interceptor;
import com.zkh.util.RedisUtil;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import java.util.List;
/** 
* Redis缓存过滤器 
*/
public class MethodCacheInterceptor implements MethodInterceptor {    
private RedisUtil redisUtil;    
private List<String> targetNamesList; // 禁用缓存的类名列表
    private List<String> methodNamesList; // 禁用缓存的方法列表
    private String defaultCacheExpireTime; // 缓存默认的过期时间

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        Object value = null;

        String targetName = invocation.getThis().getClass().getName();
        String methodName = invocation.getMethod().getName();        
        if (!isAddCache(targetName, methodName)) {            
        // 跳过缓存返回结果
            return invocation.proceed();
        }
        Object[] arguments = invocation.getArguments();
        String key = getCacheKey(targetName, methodName, arguments);        
        try {            // 判断是否有缓存
            if (redisUtil.exists(key)) {                
            return redisUtil.get(key);
            }            // 写入缓存
            value = invocation.proceed();            
            if (value != null) {                
            final String tkey = key;                
            final Object tvalue = value;                
            new Thread(new Runnable() {                    
            @Override
                    public void run() {
                        redisUtil.set(tkey, tvalue, Long.parseLong(defaultCacheExpireTime));
                    }
                }).start();
            }
        } catch (Exception e) {
            e.printStackTrace();            
            if (value == null) {                
            return invocation.proceed();
            }
        }        return value;
    }    
    /**     
    * 是否加入缓存     
    *     
    * @return     
    */
    private boolean isAddCache(String targetName, String methodName) {        
    boolean flag = true;        
    if (targetNamesList.contains(targetName)
                || methodNamesList.contains(methodName) || targetName.contains("$$EnhancerBySpringCGLIB$$")) {
            flag = false;
        }        return flag;
    }    
    /**     
    
    * 创建缓存key     
    *     
    * @param targetName     
    
   * @param methodName     
   * @param arguments    
    */
    private String getCacheKey(String targetName, String methodName,
                               Object[] arguments) {
        StringBuffer sbu = new StringBuffer();
        sbu.append(targetName).append("_").append(methodName);        
        
        if ((arguments != null) && (arguments.length != 0)) {           
         for (int i = 0; i < arguments.length; i++) {
                sbu.append("_").append(arguments[i]);
            }
        }        return sbu.toString();
    }    public void setRedisUtil(RedisUtil redisUtil) {        
    this.redisUtil = redisUtil;
    }    public void setTargetNamesList(List<String> targetNamesList) {        
    this.targetNamesList = targetNamesList;
    }    public void setMethodNamesList(List<String> methodNamesList) {        
    this.methodNamesList = methodNamesList;
    }    public void setDefaultCacheExpireTime(String defaultCacheExpireTime) {        
    
    this.defaultCacheExpireTime = defaultCacheExpireTime;
    }
}

RedisUtil.java 工具类

package com.zkh.util;import org.apache.log4j.Logger;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import java.io.Serializable;import java.util.Set;import java.util.concurrent.TimeUnit;/** * Redis工具类 */public class RedisUtil {    private RedisTemplate<Serializable, Object> redisTemplate;    /**     * 批量删除对应的value     *     * @param keys     */
    public void remove(final String... keys) {        for (String key : keys) {            remove(key);
        }
    }    /**     * 批量删除key     *     * @param pattern     */
    public void removePattern(final String pattern) {
        Set<Serializable> keys = redisTemplate.keys(pattern);        if (keys.size() > 0)
            redisTemplate.delete(keys);
    }    /**     * 删除对应的value     *     * @param key     */
    public void remove(final String key) {        if (exists(key)) {
            redisTemplate.delete(key);
        }
    }    /**     * 判断缓存中是否有对应的value     *     * @param key     * @return     */
    public boolean exists(final String key) {        return redisTemplate.hasKey(key);
    }    /**     * 读取缓存     *     * @param key     * @return     */
    public Object get(final String key) {
        Object result = null;
        ValueOperations<Serializable, Object> operations = redisTemplate
                .opsForValue();
        result = operations.get(key);        return result;
    }    /**     * 写入缓存     *     * @param key     * @param value     * @return     */
    public boolean set(final String key, Object value) {        boolean result = false;        try {
            ValueOperations<Serializable, Object> operations = redisTemplate
                    .opsForValue();
            operations.set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }        return result;
    }    /**     * 写入缓存     *     * @param key     * @param value     * @return     */
    public boolean set(final String key, Object value, Long expireTime) {        boolean result = false;        try {
            ValueOperations<Serializable, Object> operations = redisTemplate
                    .opsForValue();
            operations.set(key, value);
            redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }        return result;
    }    public void setRedisTemplate(
            RedisTemplate<Serializable, Object> redisTemplate) {        this.redisTemplate = redisTemplate;
    }
}


效果展示

Java での SSM と Redis の統合の詳細な説明

刚开始Redis中没有任何记录,接下来访问一下第一页记录

Java での SSM と Redis の統合の詳細な説明

再查看缓存,记录已经存如Redis,并且第一次访问会从Mysql中读取数据

Java での SSM と Redis の統合の詳細な説明

Java での SSM と Redis の統合の詳細な説明

F5

Java での SSM と Redis の統合の詳細な説明msi を使用してインストールした後、Redis はデフォルトで起動し、構成は必要ありません

Java での SSM と Redis の統合の詳細な説明

その後、🎜redis.windows.conf🎜 ファイルで Redis のポート番号、パスワード、その他の構成を変更できます。変更が完了したら、 redis-server redis.windows.conf コマンドを使用して再起動します🎜🎜🎜🎜 Redis インストール ディレクトリで実行します redis-cli -h 127.0.0.1 -p 6379 -aパスワードを使用してRedis操作インターフェイスを開きます🎜🎜🎜🎜エラー(error) ERR操作が許可されていませんが報告された場合は、検証に認証パスワードを使用します🎜🎜🎜🎜SSM は Redis を統合します🎜🎜🎜ここでは、前の記事の SSM フレームワーク統合に基づいて直接 Redis 統合が実行されます 🎜 ここで、Redis に格納されている pojo クラスは Serializable インターフェイス 🎜。 🎜<h3 id="Redis-の依存関係を導入するように-pom-xml-を構成します">🎜Redis の依存関係を導入するように pom.xml を構成します🎜</h3> <p class="sourceCode"><br>🎜rrreee</p> <h3 id="redis-properties">🎜redis.properties🎜</h3>rrreee<h3 id="applicationContext-redis-xml">🎜applicationContext - redis.xml🎜</h3> <p class="sourceCode"><br>🎜rrreee</p> <h3 id="MethodCacheInterceptor-java">🎜MethodCacheInterceptor.java🎜</h3> <p class="sourceCode"><br>🎜rrreee🎜RedisUtil.java ツールクラス🎜rrreee</p> <h3><br></h3> <h2 id="エフェクト表示">🎜エフェクト表示🎜</h2>🎜<img src="https://img.php.%20cn%20/upload/article/000/000/194/939038e3af9cf2dd7f0f3e10ee047e8c-1.jpg?x-oss-process=image/resize,p_40" alt="Java での SSM と Redis の統合の詳細な説明" >🎜🎜最初は Redis にレコードがありません。次に、レコードの最初のページにアクセスします🎜🎜<img src="https://%20img.php.cn/upload/article/000/000/194/939038e3af9cf2dd7f0f3e10ee047e8c-2.jpg?x-oss-process=image/resize,p_40" alt="Java での SSM と Redis の統合の詳細な説明" >🎜🎜キャッシュを再度確認してください。レコードは Redis に保存されており、データは最初に MySQL から読み取られます。訪問🎜🎜<img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/194/24b88ad902d70031e9c7119d69851130-3.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Java での SSM と Redis の統合の詳細な説明" >🎜🎜<img src="https://img.php%20.cn/upload/article/000/000/194/24b88ad902d70031e9c7119d69851130-4.jpg?x-oss-process=image/resize,p_40" alt="Java での SSM と Redis の統合の詳細な説明" >🎜🎜<code>F5 を押してページを更新します。Tomcat コンソールから、SQL クエリが存在しないことがわかります。データをキャッシュするとデータベースの負担が軽減されます🎜🎜🎜🎜🎜🎜🎜。

以上がJava での SSM と Redis の統合の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)