2020-01-12 18:03·澳门巴黎人手机版

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

# Redis数据库索引spring.redis.database=0# Redis服务器地址spring.redis.host = 127.0.0.1# Redis服务器连接端口spring.redis.port=6379# Redis服务器连接密码spring.redis.password=# 连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8# 连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.pool.max-wait=-1# 连接池中的最大空闲连接spring.redis.pool.max-idle=8# 连接池中的最小空闲连接spring.redis.pool.min-idle=0# 连接超时时间spring.redis.timeout=6000

图片 1

springboot整合redis就轻便了,只供给简单铺排就可以了。

       退出再登入,不会实行数据库的询问,直接从数据库中抽取缓存,登入成功。

前提是您已经安装redis且扶持远程连接,redis的设置这里不再赘言,有供给的能够参照小编的另意气风发篇小说:centos 7.3上安装redis。此地关键讲讲怎么样判断及安装redis支持远程连接。

redis缓存会种类化要缓存的对象,必得将全部实体类完成连串化,否则会报错

 

除此而外ssm整合以致mysql数据库须要的信赖,引进以上七个就可以。注意:介意那七个jar包的版本搭配,有个别版本搭配可能会报错,那三个版本搭配亲测可用。

        StringRedisTemplate默许接收的是String的种类化战略,保存的key和value都以运用此政策类别化保存的。StringRedisSerializer

注意:自己那边并从未引进redis.properties,是因为自身在spring-dao.xml中引进jdbc.properties时一同引入了,所以那边没有要求再引进。spring-dao.xml中引进.properties文件代码:

表 1. @Cacheable 效用和布署方式

@Cacheable 的法力 首要针对方法配置,能够基于章程的央求参数对其结果开展缓存

@Cacheable 主要的参数
value
key
condition
 <settings> <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings>
@CacheEvict(cacheNames = "interviewService.interview" ,allEntries = true)

@CacheEvict(cacheNames = "interviewService.interview" ,key = "123")

布置redis世襲到spring管理项目,使用评释落成redis缓存作用。

@Servicepublic class AreaServiceImpl implements AreaService { @Autowired private AreaDao areaDao; @Cacheable(value="common") //加入缓存 //@CacheEvict(value="common") //清除缓存 @Override public List<Area> getAreaList() { return areaDao.queryArea(); }}

增进表明 @EnableCaching

   3.spring管理bean的更动,xml文件配置

AreaServiceTest.java:

除查询单个数据的service方法,必要丰盛缓存评释,其他service的艺术都应当是去掉缓存注明,列表不增添此外注解

  4》@CacheEvict 用来消逝用在本办法依然类上的缓存数据(用在哪儿排除何地)

2、编写RedisUtil工具类:

@EnableCaching

  3》@CachePut   形似于改善操作,即每一趟不管缓存中有未有结果,都从数据库查找结果,并将结果更新到缓存,并重返结果

图片 2image.png

public class XX implements java.io.Serializable

翻看一下这次缓存的数据,在redis可视化工具中

5、在service层使用redis:

@Cacheable(cacheNames = "interviewService.interview", key = "123")

   ①redis以键值对的样式积攒缓存数据,何况会对指标进行种类化,如上海教室可以看到,键和值前边都有蓬蓬勃勃串系列化的字符

其次次运行:

  • 改良缓存的注释:@CachePut(表示在改换操作时更新该redis缓存,不过利用该证明时,设置redis的章程必得和更正的措施再次来到相通的类)

   4. RedisCacheConfig redis自定义的工具类,自定义redis的key生成准绳

redis是意气风发种nosql数据库,以<key,value>的样式积攒数据,其速度相比较于MySQL之类的数据库,也正是内部存储器读写与硬盘读写的间隔,所以平常作为缓存。接下来就各自看看在spring项目和springboot项目中什么运用redis。

向pom.xml中增加信任

package com.sxd.util;

import java.lang.reflect.Method;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
     protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);

        private volatile JedisConnectionFactory mJedisConnectionFactory;
        private volatile RedisTemplate<String, String> mRedisTemplate;
        private volatile RedisCacheManager mRedisCacheManager;

        public RedisCacheConfig() {
            super();
        }

        public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {
            super();
            this.mJedisConnectionFactory = mJedisConnectionFactory;
            this.mRedisTemplate = mRedisTemplate;
            this.mRedisCacheManager = mRedisCacheManager;
        }

        public JedisConnectionFactory redisConnectionFactory() {
            return mJedisConnectionFactory;
        }

        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
            return mRedisTemplate;
        }

        public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
            return mRedisCacheManager;
        }



        @Bean
        public KeyGenerator keyGenerator() {
            return new KeyGenerator() {
                @Override
                public Object generate(Object target, Method method,
                        Object... params) {
                    //规定  本类名+方法名+参数名 为key
                    StringBuilder sb = new StringBuilder();
                    sb.append(target.getClass().getName()+"_");
                    sb.append(method.getName()+"_");
                    for (Object obj : params) {
                        sb.append(obj.toString()+",");
                    }
                    return sb.toString();
                }
            };
        }

}

⑦:那样并不能够评释帮衬远程连接,大家输入ping,假如回去pong,表达才是协助远程连接的。

  • 消弭缓存的注脚:@CacheEvict(保存、校勘、删除等等供给对数据库数据实行更动的操作,则要求清除缓存;allEntries表示免除全部缓存,也能够钦命祛除某些key)

   就是因为类别化计谋的不及,固然是同叁个key用分化的Template去系列化,结果是例外的。所以基于key去删除数据的时候就涌出了剔除战败的标题。

图片 3image.png

进去redis: ./redis-cli -h ip -p 6379ip为redis所在服务器ip输入 keys * :可查看全数缓存数据输入 flushall :清空全体缓存

        RedisTemplate私下认可接受的是JDK的系列化攻略,保存的key和value都以利用此政策类别化保存的。JdkSerializationRedisSerializer

<bean > <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxTotal" value="${redis.maxActive}" /> <property name="maxWaitMillis" value="${redis.maxWait}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> </bean> <bean > <property name="hostName" value="${redis.host}" /> <property name="port" value="${redis.port}" /> <property name="database" value="${redis.dbIndex}" /> <property name="poolConfig" ref="poolConfig" /> </bean> <bean > <property name="connectionFactory" ref="jedisConnectionFactory"></property> </bean> <bean > <property name="caches"> <set> <!-- 自定义的RedisUtil工具类 --> <bean > <property name="redisTemplate" ref="redisTemplate"/> <!-- name属性的值自己随便写,等下在注解当中用 --> <property name="name" value="common"/> </bean> </set> </property> </bean> <!-- 开启注解,这个非常重要,否则等下使用缓存注解不生效 --> <cache:annotation-driven cache-manager="cacheManager"/>
 @Cacheable(cacheNames = ""interviewService.interview", key = "123")

   5.在您想要做缓存的地点,使用注脚举行缓存

⑥:怒放了6379端口后重新实行:redis-cli -h 192.168.1.100出现如下结果:

  • 参与缓存的笺注:@Cacheable(单条查询等操作不需修正数据库数据的操作,列表查询慎加卡塔尔(قطر‎

键值对value值:\xAC\xED\x00\x05t\x00\x07success

②:基于再次回到的目录找到redis-cli,再施行如下命令:redis-cli -h 192.168.1.100

 

③:据他们说重返的目录,用vim展开redis.conf:vim redis.confbind 127.0.0.1改成bind 0.0.0.0,再把protected-mode=yesyes改为no,

步骤:1.maven的pom.xml文件导入架包

图片 4image.png

 

再运维叁次:

  ①选取了@Cacheable(value="myUser"),即意味着缓存中有,直接从缓存收取,未有的话先从数据库中得到消息,然后再插入

图片 5image.png

表 3. @CacheEvict 作用和结构方式

@CachEvict 的功力 主要针对方法配置,能够基于早晚的基准对缓存举办清空

@CacheEvict 主要的参数
value
key
condition
allEntries
beforeInvocation

 

*************************************************************************************************************************************************************************************

*************************************************************************************************************************************************************************************

spEL表明式的行使方法:

有眷表明完毕Redis缓存的章程,只有将key设计的合理且强大,整个的缓存在项目中才干通用且赶快。不然,就好像自家下边的简便的事例同样,真的是好笑了。

 

如上内容归于个体笔记收拾,如有错误,迎接探究指正!

说明:

这么就做到了spring与redis的三结合。

 

5、测试:AreaServiceTest.java:

 

把AreaService.java中的@Cacheable(value="common")注释掉,把@CacheEvict(value="common")放开,再也运维: