redis是什么?简单的说,redis是一个用ANSIC语言编写的开源内存数据库,使用key-value数据结构。支持数据持久化到硬盘,支持对接多种API语言。通常被视为缓存。安装redisredis官网:https://redis.io英文版的看官网就好了,下载linux版的redisredisforwindows:https://github.com/MicrosoftArchive/redis/releases,下载windows版的到本地,直接安装。windows版下载安装完成后,在services.msc中可以看到redis服务。springboot集成redis我们使用redisson框架集成,新建一个项目,在pom中添加如下依赖:org.springframework.bootspring-boot-starter-weborg.projectlomboklomboktrueorg.redissonredisson3.15.0修改application.yml文件,添加redis配置spring:redisson:address:redis://127.0.0.1:6379#redis地址和端口,默认端口为6379password:#defaultnotradingdatabase:0#redis默认有16个分片,这里具体配置分片使用,默认为0timeout:10000#连接超时时间(毫秒)添加配置类,在yml文件中映射属性@Getter@Setter@Configuration@ConfigurationProperties(prefix="spring.redisson")//获取yml文件中的spring.redissonpublicclassRedissonProperties{//映射yml文件中数据privateStringaddress;开头的所有数据;私人字符串密码=空;私人int数据库=0;privateinttimeout=3000;}添加RedissonClient初始化类:@Configuration@ConditionalOnClass(RedissonClient.class)//只有RedissonClient存在才创建这个类@ConditionalOnProperty({"spring.redisson.address"})//只有RedissonClient存在才创建这个类有spring.redisson.address配置publicclassRedissonConfig{@ResourceprivateRedissonProperties属性;@Bean(destroyMethod="shutdown")RedissonClientredissonClient(RedissonProperties属性)throwsException{Configconfig=newConfig();SingleServerConfigsingleServerConfig=config.useSingleServer();)).setTimeout(properties.getTimeout());//如果不为空则设置密码,否则yml默认注入的空字符串会导致redisson创建不成功if(!StringUtils.isEmpty(properties.getPassword())){singleServerConfig.setPassword(properties.getPassword());}返回Redisson.create(config);}}好了,至此,准备工作就做好了,下面就可以对redis的数据进行编码操作@??RestController@RequestMapping("demo")publicclassDemoController{@ResourceprivateRedissonClientredissonClient;publicstaticStringMAP_KEY="MAP";publicstaticStringSET_KEY="SET";publicstaticStringLIST_KEY="LIST";@GetMapping("put")publicStringput(){RMapmap=redissonClient.getMap(MAP_KEY);map.put("a","你好,redis");返回“确定”;}@GetMapping("get")publicStringget(){RMapmap=redissonClient.getMap(MAP_KEY);返回map.get("a");}}先用postman请求http://localhost:8080/demo/put将数据放入,然后找一个rediside工具(本文用的是redisstudio)查看redis中的数据。数据放入,也可以使用http://localhost:8080/demo/get取出数据。但是为什么用redis的ide工具这么丑,不好看。..那是因为你在使用redissonClient的时候没有指定序列化方式。修改代码如下:RMapmap=redissonClient.getMap(MAP_KEY,JsonJacksonCodec.INSTANCE);再试一下,看看redisstudio是怎么显示的:怎么样,一目了然。RMap只能保存基本数据对象吗?它可以容纳自定义对象吗?创建一个dto:@DatapublicclassUserDtoimplementsSerializable{privateStringusername;私人整数年龄;私人日期生日;privateListfav;}新的休息方法:@GetMapping("put2")publicStringput2(){RMapmap=redissonClient.getMap(MAP_KEY,JsonJacksonCodec.INSTANCE);UserDtouserDto=newUserDto();userDto.setUsername("张三6");userDto.setAge(18);userDto.setBirthday(newDate());userDto.setFav(Arrays.asList("苹果","梨"));map.put("userDto",userDto);return"ok";}@GetMapping("get2")publicUserDtoget2()throwsInterruptedException{RMapmap=redissonClient.getMap(MAP_KEY,JsonJacksonCodec.INSTANCE);UserDtouserDto=map.get("userDto");returnuserDto;}按照套路打牌,postman自己请求,然后看redisstudio的数据:怎么样,舒服吧,对象都是你存进去的,你可以从redis中取出来转换他们自己变成UserDto对象!!!嗯,上面就是RMap对象。下面就不详细解释list和set了,直接上传代码。@GetMapping("put3")publicStringput3(){RSetset=redissonClient.getSet(SET_KEY,JsonJacksonCodec.INSTANCE);set.add(System.currentTimeMillis());return"ok";}@GetMapping("get3")publicStringget3()throwsInterruptedException{RSetset=redissonClient.getSet(SET_KEY,JsonJacksonCodec.INSTANCE);Iteratoriterator=set.iterator();字符串结果="";while(iterator.hasNext()){结果+=","+iterator.next();}返回结果;}@GetMapping("put4")publicStringput4(){RListlist=redissonClient.getList(LIST_KEY,JsonJacksonCodec.INSTANCE);list.add(1L);return"ok";}@GetMapping("get4")publicStringget4()throwsInterruptedException{RListlist=redissonClient.getList(LIST_KEY,JsonJacksonCodec.INSTANCE);字符串结果=“”;for(LongaLong:list){结果+=aLong;}returnresult;}每次都要写JsonJacksonCodec.INSTANCE这个玩意很烦,算了,默认了吧,默认使用JsonJacksonCodec.INSTANCE序列化。然后我们修改配置。@Bean(destroyMethod="shutdown")RedissonClientredissonClient(RedissonPropertiesproperties)throwsException{Configconfig=newConfig();SingleServerConfigsingleServerConfig=config.useSingleServer();singleServerConfig.setAddress(properties.getAddresses.Database)getDatabase()).setTimeout(properties.getTimeout());//只有不为空才设置密码,否则yml默认注入的空字符串会导致创建redisson失败if(!StringUtils.isEmpty(properties.getPassword())){));}//指定默认序列化Code??ccodec=(Codec)ClassUtils.forName("org.redisson.codec.JsonJacksonCodec",ClassUtils.getDefaultClassLoader()).newInstance();config.setCodec(编解码器);returnRedisson.create(config);}让我们尝试在不指定序列化的情况下调用redis:@GetMapping("test")publicStringtest(){RMapmap=redissonClient.getMap("MAP_KEY");UserDtouserDto=newUserDto();userDto.setUsername("张三6d");userDto.setAge(18);userDto.setBirthday(newDate());userDto.setFav(Arrays.asList("苹果","梨"));map.put("userDto",userDto);return"ok";}还是乱码?不要混淆它。redis的用处远不止于此。还可以设置缓存数据的有效期,多长时间有效,可以监控数据的创建、修改、销毁事件。此外,还有队列、发布订阅等等待大家去探索。总结一下,redis做缓存很好用,但是持久化数据库没问题,他不是天生就干这个的!更多java原著阅读:https://javawu.com