springboot中的cache(三)

今天redis+cache

Redis是一个高性能的key-value数据库。它支持存储的value类型很多,包括String(字符串)、List(列表)、Set(集合)、Sorted-Set(有序集合)和Hash(哈希类型)。

数据类型 概述
String(字符串类型) 字符串是最基本的Redis值。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或JSON字符串。
List(列表类型) 在List的头端或者尾端做百万次的插入和删除操作,也能保持稳定的很少的时间消耗。在List的两端访问元素是非常快的,但是如果要访问一个很大的List中的中间部分的元素就会比较慢了,时间复杂度是O(N)。
Set(集合类型) Set的一个重要特性是不允许重复元素。向集合中添加多次相同的元素,集合中只存在一个该元素。在实际应用中,这意味着在添加一个元素前不需要先检查元素是否存在。
Hash(哈希类型) Hash保存String域和String值之间的映射,所以它们是用来表示对象的数据类型。其存储方式占用很小的空间,所以在一个小的Redis实例中就可以存储上百万的这种对象。
Sorted-Set(有序集合类型) Redis有序集合类型与Redis的集合类型类似,是非重复的String元素的集合。不同之处在于,有序集合中的每个成员都关联一个Score,Score是在排序时候使用的,按照Score的值从小到大进行排序。集合中每个元素是唯一的,但Score有可能重复。

Pom.xml 中引用相关的依赖

<!-- 引入 redis 依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.properties中增加Redis配置

#Redis配置
# Redis数据库索引(默认为0) 我们这边修改为1
spring.redis.database=1
# Redis服务器地址
spring.redis.host=ip
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负数表示没有限制)
spring.redis.pool.max-active=1000
# 连接池最大阻塞等待时间(使用负数表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池的最大空闲连接
spring.redis.pool.max-idle=10
# 连接池的最小空闲连接
spring.redis.pool.min-idle=2
# 连接超时时间(毫秒)
spring.redis.timeout=0

补充:在Java中操作redis是StringRedisTemplate与RedisTemplate

StringRedisTemplate与RedisTemplate区别点

两者的关系是StringRedisTemplate继承RedisTemplate

两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

其实他们两者之间的区别主要在于他们使用的序列化类:

RedisTemplate使用的是JdkSerializationRedisSerializer 存入数据会将数据先序列化成字节数组然后在存入Redis数据库。

StringRedisTemplate使用的是StringRedisSerializer

StringRedisTemplate对应的方法

  • stringRedisTemplate.opsForValue()[String(字符串)]
  • stringRedisTemplate.opsForList()[List(列表)]
  • stringRedisTemplate.opsForSet()[Set(集合)]
  • stringRedisTemplate.opsForHash()[Hash(散列)]
  • stringRedisTemplate.opsForZSet()[ZSet(有序集合)]

测试类(定义stringRedisTemplate和redisTemplate

在这里插入图片描述

在测试定义的测试方法

@Test
public void test01() {
     //给redis中保存数据
    stringRedisTemplate.opsForValue().append("msg","hello");
	String msg = stringRedisTemplate.opsForValue().get("msg");
	System.out.println(msg);
		
	stringRedisTemplate.opsForList().leftPush("mylist","1");
	stringRedisTemplate.opsForList().leftPush("mylist","2");	
 }

 //测试保存对象
 @Test
 public void test02() {
     Employee empById = employeeMapper.getEmpById(1);
     //默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
     redisTemplate.opsForValue().set("emp-001",empById);
     //1、将数据以json的方式保存
     //(1)自己将对象转为json
     //(2)redisTemplate默认的序列化规则;改变默认的序列化规则;
     empRedisTemplate.opsForValue().set("emp-01", empById);
     // emp-01使用的empRedisTemplate的json序列化,emp-001使用的jdk序列化机制
 }

在Redis Desktop中可以看见msg已经读取到redis中的,
在这里插入图片描述
mylist数组也成功读入

在这里插入图片描述

jdk序列化

进行持久化操作和返回数据时都会使用到javabean来统一封装参数,方便操作,一般我们也都会实现Serializable接口进行 jdk序列化(默认是看不懂的)
在这里插入图片描述

在这里插入图片描述

Json序列化

在这里插入图片描述

@Configuration
public class MyRedisConfig {

    @Bean
    public RedisTemplate<Object, Employee> empRedisTemplate(
            RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Employee> ser = new Jackson2JsonRedisSerializer<Employee>(Employee.class);
        template.setDefaultSerializer(ser);
        return template;
    }
}

在这里插入图片描述

在这里插入图片描述

对应的数据库
在这里插入图片描述

发布了790 篇原创文章 · 获赞 100 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_44510615/article/details/103656959
今日推荐