赞
踩
前端的App、网页在登录时,或是用户在进行一些敏感操作的时候需要进行短信验证。但是在等待用户输入验证码的这段时间里,这个随机生成的验证码在后台应该存放在哪里呢?
放在MySql数据库?可以的确是可以,但是如果用户访问量一下巨大起来,SQL读写面临高并发,会严重拖慢程序响应速度,甚至导致直接宕机。
那放在Session里?emmm好像也不行,执行效率过低,性价比不高。在多用户访问时似乎并不能很好的承担这一重任。
我们需要一个读写迅速
,使用方便的工具。于是我们顺着思路,比磁盘读写速度更快的,那就是内存读写
咯,于是Redis 数据库便浮现于脑海。
一直想着找机会试试这个东西,今天就是个正好的机会。
由于是第一次使用Redis,还一头雾水,天真的以为在 Pom.xml 文件里引入依赖就可以使用了…
直到把 Redis 的配置过程和 Mysql 联系到一起,才逐渐明白。
首先要进行安装:(所有安装资源链接都放到文章最后了)
下载、解压之后,配置环境变量。
然后打开控制台
输入redis-server.exe
,如果出现Redis 的界面,则代表安装成功、环境变量配置成功。
毕竟是Redis 新手,直观总好过抽象。图形化界面不仅可以让我们对Redis理解得更快,在操作上也会更加便捷。
解压、安装之后。
新建一个连接,就跟Mysql一样。
此时界面是这样的。
左边那一排就应该是“数据库”了,未来的数据应该就会存储到那里。
现在可以开始在项目里配置了。
首先是Pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后是在 yml 文件中进行配置,redis是spring的直接下级目录哦。
redis: #数据库索引 database: 0 host: 127.0.0.1 port: 6379 password: jedis: pool: #最大连接数 max-active: 8 #最大阻塞等待时间(负数表示没限制) max-wait: -1 #最大空闲 max-idle: 8 #最小空闲 min-idle: 0 #连接超时时间 timeout: 10000
然后需要一个配置类,可以以后直接复制用
import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { @Bean(name = "redisTemplate") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){ RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); //参照StringRedisTemplate内部实现指定序列化器 redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(keySerializer()); redisTemplate.setHashKeySerializer(keySerializer()); redisTemplate.setValueSerializer(valueSerializer()); redisTemplate.setHashValueSerializer(valueSerializer()); return redisTemplate; } private RedisSerializer<String> keySerializer(){ return new StringRedisSerializer(); } //使用Jackson序列化器 private RedisSerializer<Object> valueSerializer(){ return new GenericJackson2JsonRedisSerializer(); } }
到这里我们可以开始测试了,新建一个测试单元。
首先测试数据的新增
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.junit4.SpringRunner; import java.util.concurrent.TimeUnit; @RunWith(SpringRunner.class) @SpringBootTest public class test { @Autowired private RedisTemplate redisTemplate; @Test public void A() throws InterruptedException { //插入单条数据 redisTemplate.opsForValue().set("key1", "我是新信息"); System.out.println(redisTemplate.opsForValue().get("key1")); //插入单条数据(存在有效期) System.out.println("-----------------"); redisTemplate.opsForValue().set("key2", "这是一条会过期的信息", 1, TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间 System.out.println(redisTemplate.hasKey("key2"));检查key是否存在,返回boolean值 System.out.println(redisTemplate.opsForValue().get("key2")); Thread.sleep(2000); System.out.println(redisTemplate.hasKey("key2"));//检查key是否存在,返回boolean值 System.out.println(redisTemplate.opsForValue().get("key2")); System.out.println("-----------------"); } }
结果
打开图形化界面验证一下,确实加进去了,过期的信息就不见了
接下来我们试试删除
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.junit4.SpringRunner; import java.util.concurrent.TimeUnit; @RunWith(SpringRunner.class) @SpringBootTest public class test { @Autowired private RedisTemplate redisTemplate; @Test public void A() throws InterruptedException { redisTemplate.delete("key1"); } }
结果发现刚刚添加的东西成功删除。
新技能get!!继续加油!!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。