SSM一步一坑:Spring+Redis-Cluster部署Redis集群 @Cacheable注解

SpringBoot2.0整合SpringCache和Redis.docx SpringBoot2.0整合SpringCache和Redis 1 1. SpringBoot对应(自带)RedisClient是不同的 1 2. 实战 1 2.1. maven配置 1 2.2. yml配置 1 2.3. RedisConfig配置 1 2.4. RedisController 2 3. Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用 3 3.1. @Cacheable 4 3.2. @CachePut 6 3.3. @CacheEvict 7 3.4. @Caching 8 3.5. 使用自定义注解 8 4. 使用Lettuce 操作redis单机版和redis集群 9 立即下载

Spring+Redis集群部署方案

建议和我使用的版本相同,不然会出现各种各样的错误

spring-*:4.2.8    redis-data-redis:1.8.1    redis.clients:2.9.0  commons-pool2:2.4.3

加载的配置文件(部分)

<!-- jedis依赖 开始整合redis缓存 -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
			<version>1.8.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.4.3</version>
		</dependency>

redis-spring.xml 需要在web.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:cache="http://www.springframework.org/schema/cache"
       xmlns:p="http://www.springframework.org/schema/p"    
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:mvc="http://www.springframework.org/schema/mvc"    
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/cache
            http://www.springframework.org/schema/cache/spring-cache.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd">

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


     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
         <!--最大空闲数--> 
        <property name="maxIdle" value="${redis.pool.maxIdle}"/> 
        <property name="maxTotal" value="${redis.pool.maxTotal}"/>
        <!--最大建立连接等待时间-->  
        <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>
        <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个-->  
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
        <property name="testOnReturn" value="${redis.pool.testOnReturn}"/>
    </bean>    
    
    <!-- *************************** -->
<!--多节点配置,配置RedisClusterConfiguration-->
    <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
        <property name="maxRedirects" value="6"></property>
        <property name="clusterNodes">
            <set>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="127.0.0.1"/>
                    <constructor-arg name="port" value="9000"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="127.0.0.1"/>
                    <constructor-arg name="port" value="9001"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="127.0.0.1"/>
                    <constructor-arg name="port" value="9002"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="127.0.0.1"/>
                    <constructor-arg name="port" value="9003"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="127.0.0.1"/>
                    <constructor-arg name="port" value="9004"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="127.0.0.1"/>
                    <constructor-arg name="port" value="9005"/>
                </bean>
            </set>
        </property>
    </bean>
<!-- *************************** -->
    
    
     <!-- 连接池配置,类似数据库连接池 -->
     <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!--  这里注释的为单节点
        <property name="hostName" value="${redis.master.ip}"/> 
        <property name="port" value="${redis.master.port}"/> 
        -->   
        <property name="poolConfig" ref="jedisPoolConfig"/>
        <constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/>        
    </bean>
    <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!!  -->  
    <bean id="redisKeySerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
    <bean id="redisValueSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
    <!-- spring data提供redis模板 --> 
      <!-- 在学习redis的时候,我们一般会用到spring data来将redis整合,我们需要用到配置文件,在过程中会出现redis的键乱码\ xac \ xed \ x00 \ x05t \ x00 \ tb!
      其实只要改变下配置文件,下面是全部配置文件,注掉的是会乱码的配置 -->    
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
        <property name="keySerializer" ref="redisKeySerializer"/>
        <property name="hashKeySerializer" ref="redisKeySerializer"/>
        <property name="valueSerializer" ref="redisValueSerializer"/>
        <property name="hashValueSerializer" ref="redisValueSerializer"/>
    </bean>
    
     <util:properties id="redisExpires" location="classpath:rediscustom.properties"/>
      
      <!-- 使用RedisCacheManger作为cachemange实现类 ,需要将下面的id=aaa改为id=CacheManager-->
      <bean id="aaa" class="org.springframework.data.redis.cache.RedisCacheManager">
        <constructor-arg index="0" ref="redisTemplate"/>
         <!-- 属性设置了全局的默认失效时间 --> 
        <property name="defaultExpiration" value="600"/>
        <property name="usePrefix" value="true"/>
        <!-- expires属性则根据map指定的key单独设置失效时间  -->
        <property name="expires" ref="redisExpires"/>
        <property name="CacheNames" value="content"/>
        <!-- expires属性则根据map指定的key单独设置失效时间 
        <property name="expires">
            <map>
                <entry key="content" value="30"/>
            </map>
        </property>
        --> 
                
    </bean>
    
    
    <!-- 使用(测试)simpleCacheManger作为cachemange实现类 ,需要将下面的id=aaa改为id=CacheManager-->
     <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">    
         <property name="caches">    
            <set>    
                <!-- 这里可以配置多个redis -->  
                <bean class="com.song.redis.RedisCache">    
                     <property name="redisTemplate" ref="redisTemplate" />  
                      <!-- name对应的名称要在类或方法的注解中使用  -->
                     <property name="name" value="content"/>                       
                </bean> 
                <!-- 这里可以配置多个redis  
                <bean class="com.song.redis.RedisCache">
                     <property name="redisTemplate" ref="redisTemplate" />                    
                     <property name="name" value="hello"/>
                </bean>
                --> 
            </set>    
         </property>    
     </bean>    
      
   <!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->    
   <!--启用 cache 注解-->
    <cache:annotation-driven cache-manager="cacheManager" proxy-target-class="true"/>
     
</beans>

redis.properties


##########################
## redis缓存配置
##########################

# redis主机IP
redis.master.ip=127.0.0.1
# redis端口
redis.master.port=9001
# 密码
#redis.pass=123456

##########################
## redis连接池配置
##########################
# 最大空闲连接数
redis.pool.maxIdle=200
# 最大连接数
redis.pool.maxTotal=1024
# 获取链接最大等待毫秒
redis.pool.maxWaitMillis=1000
# 获取链接时检查有效性
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true

在redis-spring.xml 中加载的接口com.song.redis.RedisCache,使用的是的重写RedisTemple方法


package com.song.redis;

/**   
* Copyright: Copyright (c) 2019 LanRu-Caifu
* 
* @ClassName: RedisCache.java
* @Description: 该类的功能描述
*
* @version: v1.0.0
* @author: dongsong
* @date: 2019年7月12日 下午6:56:33 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2019年7月12日     dongsong           v1.0.0               修改原因
*/


import java.io.Serializable;

import org.apache.commons.lang3.SerializationUtils;
import org.springframework.cache.Cache;
import org.springframework.cache.support.SimpleValueWrapper;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;

public class RedisCache implements Cache {

    private RedisTemplate<String, Object> redisTemplate;
    private String name;

    @Override
    public void clear() {
        System.out.println("-------緩存清理------");
        redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                connection.flushDb();
                return "ok";
            }
        });
    }

    @Override
    public void evict(Object key) {
        System.out.println("-------緩存刪除------");
        final String keyf=key.toString();
        redisTemplate.execute(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.del(keyf.getBytes());
            }
            
        });

    }

    @Override
    public ValueWrapper get(Object key) {
        System.out.println("------缓存获取-------"+key.toString());
        final String keyf = key.toString();
        Object object = null;
        object = redisTemplate.execute(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] key = keyf.getBytes();
                byte[] value = connection.get(key);
                if (value == null) {
                    System.out.println("------缓存不存在-------");
                    return null;
                }
                return SerializationUtils.deserialize(value);
            }
        });
        ValueWrapper obj=(object != null ? new SimpleValueWrapper(object) : null);
        System.out.println("------获取到内容-------"+obj);
        return  obj;
    }

    @Override
    public void put(Object key, Object value) {
        System.out.println("-------加入缓存------");
        System.out.println("key----:"+key);
        System.out.println("key----:"+value);
        final String keyString = key.toString();
        final Object valuef = value;
        final long liveTime = 86400;
        redisTemplate.execute(new RedisCallback<Long>() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] keyb = keyString.getBytes();
                byte[] valueb = SerializationUtils.serialize((Serializable) valuef);
                connection.set(keyb, valueb);
                if (liveTime > 0) {
                    connection.expire(keyb, liveTime);
                }
                return 1L;
            }
        });

    }
    
    @Override
    public <T> T get(Object arg0, Class<T> arg1) {
        // TODO Auto-generated method stub
        return null;
    }
    
    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public Object getNativeCache() {
        return this.redisTemplate;
    }
    
    @Override
    public ValueWrapper putIfAbsent(Object arg0, Object arg1) {
        // TODO Auto-generated method stub
        return null;
    }

    public RedisTemplate<String, Object> getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void setName(String name) {
        this.name = name;
    }
}

使用方法:

在你需要将数据加入redis的方法上加上@Cacheable(CacheNames=“content”,key=“‘***’”)其中在使用的key必须符合EL/spEL规则。另cacheNames中的值已在redis-spring.xml中配置好。

例子

@Override
	@Cacheable(cacheNames="content",key="'adminlog'")
	public List<AdminLog> selectall() {
		// TODO Auto-generated method stub
		return adminlogmapper.selectlist();
	}

 

SSM与memcached整合项目Spring Cache 承接上个代码将memecached调用改为交给Spring Cache代理 立即下载

相关推荐

随机向量函数链神经网络(RVFLNN)简介——附测试代码

宽度学习(Broad Learning System)原理介绍:随机向量函数链神经网络(RVFLNN) 目录宽度学习(Broad Learning System)原理介绍:随机向量函数链神经网络(RVFLNN)结构分析和训练优化 函数链神经网络(Functional-link neural network,简称FLNN)的结构如下图。 和深度神经网络结构不同的是,FLNN相当于把隐层放到了输入层中,作为增强结点(Enhancement nodes)。也可以理解成FLNN在输入层就对输入向量进行了非线性变换

weixin_44517742的博客 1万+

ssm+redis整合(通过cache方式)

这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1、pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSch...

weixin_30284355的博客 201

Ubuntu中snap简单介绍

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。但是由此带来的问题就是它占用更多的磁盘空间 介绍一些常用命令,有点类似docker 1、查看已经通过snap安装的snap包 snap list可以查看 2、可以搜索想要的snap包,例如tomcat snap search tomcat

icanflying的博客 4万+

Redis-Cluster集群整合SpringCache

前言    SpringCache不支持集群,只适用于单机环境,集群环境下,每台服务器的spring cache就会不同步,这样就会产生问题,同时SpringCache是代码级的缓存,实际上还是使用的JVM的内存来缓存对象。Redis 作为一个缓存服务器,是内存级的缓存,它是使用单纯的内存来进行缓存,同时redis设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况。Re

刘大磊的博客 2674

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1365

29、Power BI 中行级安全(RLS)的实现与应用

本文详细介绍了在Power BI中实现行级安全(RLS)的方法,包括静态RLS和动态RLS的实现流程、适用场景及对比分析。通过具体业务场景,展示了如何创建安全角色、定义规则、验证角色、发布模型以及分配成员。此外,还探讨了更复杂的动态RLS场景,如基于父子层次结构的数据访问控制和从外部源获取用户信息的实现方式。文章最后总结了最佳实践建议及未来发展趋势,为企业在Power BI中高效、安全地实施数据访问控制提供了全面指导。

terraform7cloud的博客 195

java8 jedis ttl,小白的springboot之路(八)、继承Redis以及@Cacheable注解实现Redis缓存,...

小白的springboot之路(八)、继承Redis以及@Cacheable注解实现Redis缓存,0、前言在项目中,缓存作为一种高效的提升性能的手段,几乎必不可少,Redis作为其中的佼佼者被广泛应用;一、spring boot集成Redis1、添加依赖org.springframework.bootspring-boot-starter-data-redis2、配置文件增加Redis配置###...

weixin_39921023的博客 395

点云结构面智能识别与裂隙网络分析系统

点云结构面智能识别系统摘要 本系统采用深度学习与传统几何算法融合的方法,实现岩石结构面的智能识别与分析。系统包含7个核心模块:点云预处理、结构面识别、分组分割、参数计算、粗糙度分析、裂隙网络生成和可视化。技术路线结合PointNet++深度学习架构与RANSAC、区域生长等传统算法,通过预处理→深度学习识别→几何精修→参数计算→网络构建的流程实现高精度分析。预处理模块实现点云降噪、下采样和法向量估计,深度学习模块基于改进的PointNet++架构进行特征提取和分类。系统支持多种点云格式输入,提供完整的结构面

huanghm88的专栏 345

spring集成jedisCluster集群,redis异步阻塞队列

1.先来一个单机版redis使用连接池操作redis队列 @Test publicvoidtestJedisPool()throwsException { // 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。 JedisPool jedisPool= newJedisPool("127.0.0.1", 6379); // 第二步:从JedisPoo...

a116385895的博客 2183

15、远程操作水下航行器(ROV)的非线性控制系统设计

本文探讨了远程操作水下航行器(ROV)的非线性控制系统设计,重点介绍了多变量PID控制、改进的PD控制和滑模控制三种方法。详细阐述了各控制策略的原理、建模与仿真过程,并通过对比分析其在稳态误差、振荡、抖振及跟踪效果等方面的性能表现。文章还提出了针对不同控制方法的优化建议,并给出了选择合适控制策略的决策流程,为ROV高精度运动控制提供了系统性解决方案。

sun99的博客 156

UG NX二次开发(C++)-NX2406系列二次开发编程模板配置

前面已经写了有关UG NX二次开发编程模板配置的文章,但是由于NX2406/2412系列的版本中,在UGOpen文件夹中没有了vs_files文件夹了,而是采用了VSIX Project的方式配置(其适用于VS2019),在VS2022中不能正确的配置。我结合以前配置模板的经验和现在的配置方式讲一下NX2406系列二次开发编程模板的配置。我把相应的编程模板放在资源文件UG NX二次开发编程模板(基于NX2406版本制作)中,方便大家下载使用。

GimiGimmy 2640

redis在java中的使用(注解和jedis)

注解方式可以参照: https://blog.youkuaiyun.com/qq_41320105/article/details/87867636 补充: @Cacheable中的condition属性: (true/false可以的表达式)缓存的条件 可为空(为空则都缓存,默认为true),符合条件则缓存 @Cacheable中的key属性: 可以不设置key由key生成策略生成key;也可以指定key @Cacheabalue中的value属性: 如果使用在配置中声明的缓存空间则会根据配置失效;如

Y_hahaha的博客 636

VSS shielding线可以floating吗?

shielding vss不打孔,就相当于dummy metal,如果周围有其他干扰线,他们影响了这段dummy metal,这段dummy metal仍然会对目标线产生干扰,bug的是,工具知道这段dummy是vss,那么计算寄生的时候仍然把它当vss,就有可能噪声没有完全消除,而用户又看不见。而真正接地的线,相当于一直是0,就不会对目标线产生干扰,一般加shield是在route之前,这时候shield能尽量覆盖目标线,等到绕线后再加就会出现shield只覆盖到一部分目标线的情况。

m0_61544122的博客 6635

SpringBoot+Vue高校党务系统开发实战

企业级应用开发中,前后端分离架构已成为主流技术方案。SpringBoot作为轻量级Java框架,通过自动配置机制显著提升开发效率,结合MyBatis-Plus可快速构建稳健的数据持久层。Vue 3的组合式API为复杂管理系统提供了更好的代码组织方式,配合Element Plus组件库能高效开发响应式界面。在高校数字化建设领域,这类技术栈特别适合解决党务管理中的流程追踪、数据统计等痛点。通过Spring State Machine实现状态流转控制,结合MySQL事务特性确保党员发展流程的数据一致性。系统采用R

weixin_30470643的博客 334

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig详解

本文主要是为了个人练习spring的缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】,以及总结个人在使用过程中发现的疑惑点,以及如何解决等思路,另外该文章不会写的特别繁琐、复杂,如果具体想查看某个注解的详细使用方式请单个注解去优快云查询即可,我这边只是为了个人总结,言简意赅那种。在 @Cacheable 注解的使用中,共有 9 个属性供我们来使用,这 9 个属性分别是:接下来我们就分别来介绍一下它的使用。......

m0_56555119的博客 4606

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SpringBoot 缓存之 @Cacheable 详细介绍

每次调用需要缓存功能的方法时,Spring 会检查指定参数的指定目标方法是否已经被调用过,如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。

希望有志同道合的的朋友可以互相学习! 2601

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java学习之@Cacheable注解

在我们日常工作中,相信大部分人应该都用过redis做缓存,今天发现项目中用了一个注解来自动完成接口结果的缓存--@Cacheable注解(@Cacheable注解是springframework下的注解)

qq_44922250的博客 3505

@Cacheable和redis集成使用

每次查询耗费时间很长,考虑该接口数据是不经常变数据,故新增缓存处理,使用springboot的缓存接口和redis结合使用

qiuweifan的博客 6763

redis之20分钟轻松搞定springCache缓存(单机+集群)

redis之20分钟轻松搞定springCache缓存(单机+集群)原文地址:https://m.baidu.com/from=1013843a/bd_page_type=1/ssid=0/uid=0/pu=sz%401321_1002%2Cta%40utouch_2_7.0_2_7.3%2Cusm%401/baiduid=9B4ABF6E3921A8D5A4D61ED28BC57185/w=0_...

u011544437的专栏 1万+

redis集群搭建简单使用 项目中redis单机版+连接池 +集群版的使用

redis-cluster架构图 redis-cluster投票:容错 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

weixin_39655220的博客 2738

Redis 实用经验,集群,整合spring缓存机制

前言 ​ 来好好学一下,缓存到底该怎么写,并且记录一下,以前没有注意到的方法 缓存 什么时候用缓存? ​ 业务数据常用吗?如果查询的频率不高,或者对数据库的影响不大,就没有必要做缓存,因为内存是很宝贵的 ​ 而且,如果我们读的数据非常大,那么也不能轻易用缓存,因为这会对内存造成较大的占用 一般流程是什么? ​ 我们会优先读取redis,如果redis没有,那么就会读取数据库,然后把这些信息写入redis,这样,我们下次就可以读redis了 写的业务需要缓存吗? ​ 如果我们的业务,需要高速的写入,或者写.

岚殿的代码笔记 1953

Springboot集成Redis详细教程(缓存注解使用@Cacheable,@CacheEvict,@CachePut)

文章目录一、SpringBoot集成Redis1.Pom依赖2.Spring yml文件配置(以Cluster模式为例)3.Redis类配置二、@Cacheable注解使用1.Cache和CacheManager接口说明2.@Cacheable使用2.1.代码样例2.2.@Cacheable常用属性参数2.3.key spEL表达式3.@CacheEvict使用4.@CachePut使用5.@Caching使用结尾 一、SpringBoot集成Redis Jedis和Lettuce是Java操作Redi

少说,多做 1万+

【异常】SSM+Redis缓存@Cacheable之java.lang.ClassCastException等

在整合redis的时候使用注解配置缓存策略的时候出现下述错误。java.lang.ClassCastException: com.guide.pojo.TUser cannot be cast to java.lang.String原因是返回值为对象,而不是默认的字符串类型。强转出现错误,抛出异常。解决办法: 配置文件中在RedisTemplate中注入序列化等属性。<bean id="redis

ZT的专栏 6065

springboot 缓存 Cacheable 集成redis

1. 开启缓存注解 @EnableCaching @Configuration public class RedisConfig { @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory...

DQchat的博客 4000

SSM之一步一坑:SpringMVC配置Content-Type消息头 返回 application/json; charset=utf-8

具体描述 使用SSM搭建Web系统时,在spring-mvc.xml中配置了返回json的格式,使用的是com.alibaba.fastjson的包,具体配置如下 <!-- ========================================分隔线========================================= --> <!--自定义消息转...

concealed0的博客 9394
上一篇: SSM之一步一坑:记录eclipse maven项目的一个大坑 Description Resource Path Location Type Java compiler level does
下一篇: Linux运维·ubuntu18.04搭建Redis集群
concealed0
博客等级 码龄9年 63粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值