目录 1、五大基本数据类型和操作 1.1 字符串-string 1.2 列表-list 1.3 集合-set 1.4 键值对-hash 1.5 有序集合-zset 2、Redis整合 2.1 spring-boot-starter-data-redis 依赖 2.2 redis配置 2.3 SpringBoot框架自动配置
目录
- 1、五大基本数据类型和操作
- 1.1 字符串-string
- 1.2 列表-list
- 1.3 集合-set
- 1.4 键值对-hash
- 1.5 有序集合-zset
- 2、Redis整合
- 2.1 spring-boot-starter-data-redis 依赖
- 2.2 redis配置
- 2.3 SpringBoot框架自动配置的redisTemplate
- 2.3.1 清空数据库
- 2.3.2 添加数据
- 2.3.3 获取数据
- 2.3.4 修改值 (出现错误)
- 2.4 自定义redisTemplate
- 2.4.1 fastjson 依赖
- 2.4.2 自定义redisTemplate 配置类
- 2.4.3 使用自定义redisTemplate 重新操作数据
- 2.5 自定义redisUtils工具类
- 2.5.1 自定义redisUtils工具类
- 2.5.2 使用自定义redisTemplate和redisUtils工具类
- 2.5.3 程序中如何存放对象到 redis
1、五大基本数据类型和操作
1.1 字符串-string
1.2 列表-list
list操作起来类似于栈;
小结:
- 它是一个字符串链表,left、right都可以插入添加;
- 如果键不存在,创建新的链表;
- 如果键已存在,新增内容;
- 如果值全移除,对应的键也就消失了;
- 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了;
1.3 集合-set
1.4 键值对-hash
K V模式不变,但V是一个键值对;
1.5 有序集合-zset
在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2;
2、Redis整合
2.1 spring-boot-starter-data-redis 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.2 redis配置
#端口号 server: port: 8096 # redis配置 spring: redis: host: 127.0.0.1 #如果是redis远程服务器,此处redis服务器ip地址 port: 6379 #默认端口 # database: 0 #指定redis数据库,默认是0 # password: # 密码有就写,没有就省略
2.3 SpringBoot框架自动配置的redisTemplate
2.3.1 清空数据库
//自动装配 SpringBoot框架自动配置的redisTemplate @Autowired private RedisTemplate<Object,Object> redisTemplate; //基于SpringBoot框架自动配置的redisTemplate,操作redis缓存 //获取连接 RedisConnection connection = redisTemplate.getConnectionFactory().getConnection(); //清空数据库中的所有数据 log.info("清空数据库中的所有数据"); connection.flushDb();
2.3.2 添加数据
//程序中,添加数据据到redis log.info("------ 基于SpringBoot框架自动配置的redisTemplate 添加数据 ------"); redisTemplate.opsForValue().set("kh96_class_name","KGC_KH96"); redisTemplate.opsForValue().set("student_num",19);
2.3.3 获取数据
//程序中,从redis获取数据 log.info("------ 基于SpringBoot框架自动配置的redisTemplate 获取数据 ------"); log.info("****** 根据 班级的key:{},获取班级名称:{} ******","kh96_class_name",redisTemplate.opsForValue().get("kh96_class_name")); log.info("****** 根据 班级的key:{},获取班级人数:{} ******","student_num",redisTemplate.opsForValue().get("student_num"));
2.3.4 修改值 (出现错误)
//程序中,基于SpringBoot框架自动配置的redisTemplate,操作redis缓存,存在问题 //场景:对班级人数进行增减操作,比如将班级人数,增加10 log.info("------ 基于SpringBoot框架自动配置的redisTemplate 操作数据 ------"); redisTemplate.opsForValue().increment("student_num",10); //直接报错,会报500异常: redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range //原因,通过系统默认的 redisTemplate,存放key和value值时,会自动使用Object类的序列化和反序列化,导致redis中真实存放的数据不是原始值,而是序列化后的值
数据结果:
2.4 自定义redisTemplate
2.4.1 fastjson 依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
2.4.2 自定义redisTemplate 配置类
//Redis自定义配置类,实现一个自定义序列化方式的 redisTemplate,提缓缓掉默认自动配置的 redisTemplate,实现String类型任意类型的value @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 自定义redisTemplate的模板对象 RedisTemplate<String, Object> template = new RedisTemplate<>(); // 设置连接工厂 template.setConnectionFactory(redisConnectionFactory); //由于要通过程序操作远程的redis数据库,必须支持序列化,才可以让程序中的数据,在网络中传输 //定义String类型的序列化方式 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // 定义fastjson序列化方式,可以序列化任何对象 FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); // 需改为新的序列化方式 template.setKeySerializer(stringRedisSerializer); template.setValueSerializer(fastJsonRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setHashValueSerializer(fastJsonRedisSerializer); // 初始化为新的模板 template.afterPropertiesSet(); return template; } }
2.4.3 使用自定义redisTemplate 重新操作数据
//自动装配自定义 redisTemplate @Autowired private RedisTemplate<String,Object> redisTemplate; //其他代码不变
操作结果:
2.5 自定义redisUtils工具类
2.5.1 自定义redisUtils工具类
---> RedisUtil 工具类
2.5.2 使用自定义redisTemplate和redisUtils工具类
@GetMapping("/testRedisUtils") public String testSpringBootRedisUtils(){ //基于自定义的redisTemplate 和 RedisUtils 工具类,操作redis缓存 //程序中,添加数据据到redis log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 添加数据 ------"); redisUtils.set("kh96_class_name_utils","KGC_KH96"); redisUtils.set("student_num_utils",19); //程序中,从redis获取数据 log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 获取数据 ------"); log.info("****** 根据 班级的key:{},获取班级名称:{} ******","kh96_class_name_utils",redisUtils.get("kh96_class_name_utils")); log.info("****** 根据 班级的key:{},获取班级人数:{} ******","student_num_utils",redisUtils.get("student_num_utils")); //程序中,基于SpringBoot框架自动配置的redisTemplate,操作redis缓存 //场景:对班级人数进行增减操作,比如姜班级人数,增加10 log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 操作数据 ------"); redisUtils.incr("student_num_utils",10); return "工具类 RedisUtils 操作 redis 成功!"; }
2.5.3 程序中如何存放对象到 redis
核心思想:一般都是姜对象转换为json字符串,存入redis,获取对象数据,就先获取json字符串,再转换为对应对象即可;
@GetMapping("/testRedisUtils") public String testSpringBootRedisUtils(){ //程序中如何存放对象到 redis //核心思想:一般都是姜对象转换为json字符串,存入redis,获取对象数据,就先获取json字符串,再转换为对应对象即可 //模拟用户登录成功后,将用户信息存入redis中,方便后续从redis中获取用户信息 User loginUser = User.builder().userId(1001).userName("KH96").userTel("135012030404").build(); //直接将对象存入redis即可 log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类 存储对象 ------"); //自动把实体,通过fastjson的序列化方式,转发为JSON字符串存储 redisUtils.set(loginUser.getUserId().toString(),loginUser); //模拟获取登录用户信息,直接从redis获取存入的JSON字符串,转换为目标用户对象 User realUser = JSON.parseObject(redisUtils.get(loginUser.getUserId().toString()).toString(),User.class); log.info("------ 基于自定义的redisTemplate 和 RedisUtils 工具类获取对象:{} ",realUser); return "工具类 RedisUtils 操作 redis 成功!"; }
数据结果:
到此这篇关于SpringBoot中的Redis 缓存的文章就介绍到这了,更多相关SpringBoot Redis 缓存内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!