在项目中,缓存作为一种高效的提升性能的手段,几乎必不可少,redis作为其中的佼佼者被广泛应用;
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency>
####### redis ################ #第几个数据库,由于redis中数据库不止一个(默认会开启15个) spring.redis.database=1 # 也可指定为127.0.0.1 spring.redis.host=localhost spring.redis.port=6379 spring.redis.password=88888888 # springboot2.x以上如此配置,由于2.x的客户端是lettuce # 单位要带上 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.max-wait=10000ms spring.redis.lettuce.shutdown-timeout=100ms # springboot1.x如此配置,由于1.x的客户端是jedis #spring.redis.jedis.pool.max-active=8 #spring.redis.jedis.pool.min-idle=0 #spring.redis.jedis.pool.max-idle=8 #spring.redis.jedis.pool.max-wait=-1 #spring.redis.timeout=500
这样就集成进来了,就可以使用了,有两种template可以直接使用,redistemplate和stringredistemplate,有opsforvalue、opsforlist、opsforset、opsforzset、opsforhash几种访问方法,简单示例如下:
@resource private redistemplate redistemplate; // 写入缓存 redistemplate.opsforvalue().set("111","anson"); //读取缓存 string str = redistemplate.opsforvalue().get("111").tostring();
运行后可以查看到缓存中已经写入,读取也正常读取出来
<!--4、集成redis --> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-pool2</artifactid> <version>2.4.2</version> </dependency> <!-- redis依赖,2.0以上使用这个依赖 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency> <!-- 缓存依赖 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-cache</artifactid> </dependency>
####### redis ################ #第几个数据库,由于redis中数据库不止一个 spring.redis.database=1 # 也可指定为127.0.0.1 spring.redis.host=localhost spring.redis.port=6379 spring.redis.password=88888888 # springboot2.x以上如此配置,由于2.x的客户端是lettuce # 单位要带上 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.max-wait=10000ms spring.redis.lettuce.shutdown-timeout=100ms # springboot1.x如此配置,由于1.x的客户端是jedis #spring.redis.jedis.pool.max-active=8 #spring.redis.jedis.pool.min-idle=0 #spring.redis.jedis.pool.max-idle=8 #spring.redis.jedis.pool.max-wait=-1 #spring.redis.timeout=500
package com.anson.config; import org.slf4j.logger; import org.slf4j.loggerfactory; 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.rediscacheconfiguration; import org.springframework.data.redis.cache.rediscachemanager; import org.springframework.data.redis.connection.redisconnectionfactory; import org.springframework.data.redis.serializer.*; import java.time.duration; /** * @description: redis缓存配置类 * @author: anson * @date: 2019/12/8 21:34 */ @configuration @enablecaching public class rediscacheconfig extends cachingconfigurersupport { private static final logger logger = loggerfactory.getlogger(rediscacheconfig.class); // 自定义key生成器 @bean public keygenerator keygenerator(){ return (o, method, params) ->{ stringbuilder sb = new stringbuilder(); sb.append(o.getclass().getname()); // 类目 sb.append(method.getname()); // 方法名 for(object param: params){ sb.append(param.tostring()); // 参数名 } return sb.tostring(); }; } // 配置缓存管理器 @bean public rediscachemanager cachemanager(redisconnectionfactory connectionfactory) { rediscacheconfiguration config = rediscacheconfiguration.defaultcacheconfig() .entryttl(duration.ofseconds(60000000)) // 60s缓存失效 // 设置key的序列化方式 .serializekeyswith(redisserializationcontext.serializationpair.fromserializer(keyserializer())) // 设置value的序列化方式 .serializevalueswith(redisserializationcontext.serializationpair.fromserializer(valueserializer())) // 不缓存null值 .disablecachingnullvalues(); rediscachemanager rediscachemanager = rediscachemanager.builder(connectionfactory) .cachedefaults(config) .transactionaware() .build(); logger.info("自定义rediscachemanager加载完成"); return rediscachemanager; } // key键序列化方式 private redisserializer<string> keyserializer() { return new stringredisserializer(); } // value值序列化方式 private genericjackson2jsonredisserializer valueserializer(){ return new genericjackson2jsonredisserializer(); // return new genericfastjsonredisserializer(); } }
@override @cacheable(cachenames = "user" ,key="#id") public user selectbyprimarykey(integer id) { return usermapper.selectbyprimarykey(id); } @override @cacheable(cachenames = "users") public list<user> getall() { return usermapper.getall(); }
@cacheable(value="cachename", key"#id")
public user method(int id);
@cacheable(value="cachename", key"t(string).valueof(#name).concat('-').concat(#password))
public user method(int name, string password);
@cacheable(value="cachename", key"#user.id)
public user method(user user);
@cacheable(value="gomeo2ocache", keygenerator = "keygenerator")
public user method(user user);
我们 打开druid的sql监控,然后在swagger中进行操作,在redis desktop manager中查看redis,就可以看到第一次查询执行了数据库查询,并把结果存进了redis中,以后执行同样的查询,在缓存没过期之前,都直接从redis获取,不再执行数据库查询,可见redis缓存成功运行和释放了数据库的压力了;
下载redis windows版,解压后看到
先点击打开redis-server.exe,再打开redis-cli.exe,redis已经以默认的方式启动起来了,其中redis-server.exe就是redis服务,redis-cli.exe是客户端工具,用来以命令操作redis的;
这时候就可以使用redis,默认密码是空的,端口是6379;我们设置一下密码:
config set requirepass “你的密码” //设置密码
auth “你的密码” //验证密码是否成功设置
flushall ,是清除所有缓存的命令,用来清除重新测试的,
其他命令就不多介绍了,需要用到自行百度
下载安装包,安装,然后填入密码连接即可
如对本文有疑问, 点击进行留言回复!!
springboot利用profile配置文件进行多环境切换
如何使用MyBatis-Plus代码生成器(逆向工程)一键生成代码
网友评论