Redis实现缓存功能
Redis的安装和启动
Redis是用C语言开发的一个高性能键值对数据库,可用于数据缓存,主要用于处理大量数据的高访问负载。
项目中整合Redis
添加项目依赖
1 2 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
|
修改SpringBoot配置文件
在application.yml中添加Redis的配置及Redis中自定义key的配置
在spring节点下添加Redis的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| redis: host: localhost database: 0 port: 6379 password: jedis: pool: max-active: 8 max-wait: -1ms max-idle: 8 min-idle: 0 timeout: 3000ms
|
在根节点下添加Redis自定义key的配置
1 2 3 4 5 6 7 8
| redis: key: prefix: authCode: "portal:authCode:" expire: authCode: 120
|
注入StringRedisTemplate,实现RedisService接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
@Service public class RedisServiceImpl implements RedisService {
@Autowired private StringRedisTemplate stringRedisTemplate;
@Override public void set(String key, String value) { stringRedisTemplate.opsForValue().set(key, value); }
@Override public String get(String key) { return stringRedisTemplate.opsForValue().get(key); }
@Override public boolean expire(String key, long expire) { return stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS); }
@Override public void remove(String key) { stringRedisTemplate.delete(key); }
@Override public Long increment(String key, long delta) { return stringRedisTemplate.opsForValue().increment(key, delta); } }
|
StringRedisTemplate与RedisTemplate的区别
- 两者的关系是StringRedisTemplate继承RedisTemplate
- 两者的数据是不共通的
- 区别主要在于所使用的的序列化类:
- StringRedisTemplate使用的是StringRedisSerializer
- RedisTemplate使用的是JdkSerializationRedisSerializer,存入数据会将数据先序列化成字节数组然后再存入Redis数据库
- 使用时注意事项:
- 当Redis数据库里面本来存的是字符串数据或者要存取的数据就是字符串类型数据的时候,那么使用StringRedisTemplate即可
- 如果数据是复杂的对象类型,而取出的时候又不想做任何的数据类型转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择
- RedisTemplate使用时常见问题:RedisTemplate中存取的数据都是字节数组,当Redis中存入的数据时可读形式而非字节数组时,使用RedisTemplate取值的时候会无法获取导出数据,获得的值为null,可以使用StringRedisTemplate试试
RedisTemplate中定义了5种数据结构操作
1 2 3 4 5
| redisTemplate.opsForValue(); redisTemplate.opsForHash(); redisTemplate.opsForList(); redisTemplate.opsForSet(); redisTemplate.opsForzSet();
|
StringRedisTemplate常用操作
1 2 3 4 5 6 7 8 9 10 11 12
| stringRedisTemplate.opsForValue().set("test", "100", 60*10, TimeUnit.SECONDS); stringRedisTemplate.boundValueOps("test").increment(-1); stringRedisTemplate.opsForValue().get("test"); stringRedisTemplate.boundValueOps("test").increment(1); stringRedisTemplate.getExpire("test"); stringRedisTemplate.getExpire("test", TimeUnit.SECONDS); stringRedisTemplate.delete("test"); stringRedisTemplate.hashKey("123"); stringRedisTemplate.opsForSet().add("read_123", "1","2","3"); stringRedisTemplate.expire("read_123", 1000, TimeUnit.MILLISECCONDS); stringRedisTemplate.opsForSet().isMember("read_123", "1"); stringRedisTemplate.opsForSet().members("read_123");
|
StringRedisTemplate的使用
SpringBoot中使用注解@AutoWired即可
1 2
| @Autowired public StringRedisTemplate stringRedisTemplate;
|
使用样例
1 2 3 4 5 6 7
| @Service public class RedisServiceImpl implements RedisService { @Override public String get(String key) { return stringRedisTemplate.opsForValue().get(key); } }
|