SpringBoot集成Redis如何使用RedisRepositories(redis,springboot,开发技术)

时间:2024-05-05 15:31:57 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    SpringBoot集成Redis

    1.添加redis依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

    2.在application.properties中添加redis配置信息

    spring.redis.host=127.0.0.1#Redis服务器连接端口spring.redis.port=6379#Redis服务器连接密码(默认为空)spring.redis.password=#连接池最大连接数(使用负值表示没有限制)spring.redis.lettuce.pool.max-active=8#连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.lettuce.pool.max-wait=-1#连接池中的最大空闲连接spring.redis.lettuce.pool.max-idle=8#连接池中的最小空闲连接spring.redis.lettuce.pool.min-idle=0#连接超时时间(毫秒)spring.redis.timeout=30000

    3.SpringBoot启动类中添加注解配置

    @EnableCaching@EnableRedisRepositories//注解开启使用RedisRepositories//CRUD操作将会操作redis中的数据@SpringBootApplicationpublicclassRedisApplication{publicstaticvoidmain(String[]args){SpringApplication.run(RedisApplication.class,args);}}

    4.创建实体类Entity

    @Data@RedisHash("user")//RedisHash非常重要//user表示在redis中新建user集合//之后所有的UserEntity的保存操作全部会保存在user这个集合中//保存时Key的格式为——user:idpublicclassUserEntity{@IdprivateLongid;privateStringname;privateIntegerage;privateDatecreateTime=newDate();}

    5.创建Dao层&mdash;&mdash;数据操作层

    @RepositorypublicinterfaceUserDaoextendsCrudRepository<UserEntity,Long>{}

    6.创建Service层&mdash;&mdash;服务层

    @ServicepublicclassUserService{@AutowiredprivateUserDaouserDao;//因为使用了RedisRepositories,所以简单的crud将不用使用RedisTemplate//@Autowired//privateRedisTemplateredisTemplate;/***按user:id的方式存入redis*@paramuser*/publicvoidsave(UserEntityuser){//redisTemplate.opsForValue().set(newRandom().nextDouble()+"",user);userDao.save(user);}/***根据key从redis中查找对应value*@paramid*@return*/publicUserEntityfindOne(Longid){//UserEntityuser=(UserEntity)redisTemplate.opsForValue().get(key);UserEntityuser=userDao.findById(id).get();returnuser;}}

    7.创建Controller层&mdash;&mdash;控制层

    @RestController@RequestMapping("user")publicclassUserController{@AutowiredprivateUserServiceuserService;/***保存到redis中*@return*/@GetMapping("save")publicStringsave(){UserEntityuser=newUserEntity();user.setName(String.valueOf(newRandom().nextInt(100000)));user.setAge(newRandom().nextInt(100000));userService.save(user);System.out.println(user.toString());return"success";}/***根据key从redis中查找value*@paramid*@return*/@GetMapping("find/{id}")publicStringfind(@PathVariableLongid){UserEntityuser=userService.findOne(id);System.out.println(user);return"success";}}

    8.redis配置类

    @ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryfactory){RedisTemplate<String,Object>template=newRedisTemplate<String,Object>();template.setConnectionFactory(factory);Jackson2JsonRedisSerializerjackson2JsonRedisSerializer=newJackson2JsonRedisSerializer(Object.class);ObjectMapperom=newObjectMapper();om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);StringRedisSerializerstringRedisSerializer=newStringRedisSerializer();//key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);//hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);//value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);//hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();returntemplate;}}

    Redis中的结构为

    SpringBoot集成Redis如何使用RedisRepositories

    redis封装工具类

    @ComponentpublicclassRedisUtils{ @Autowired privateRedisTemplate<String,Object>redisTemplate; //=============================common============================ /** *指定缓存失效时间 * *@paramkey键 *@paramtime时间(秒) *@return */ publicbooleanexpire(Stringkey,longtime){ try{ if(time>0){ redisTemplate.expire(key,time,TimeUnit.SECONDS); } returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *根据key获取过期时间 * *@paramkey键不能为null *@return时间(秒)返回0代表为永久有效 */ publiclonggetExpire(Stringkey){ returnredisTemplate.getExpire(key,TimeUnit.SECONDS); } /** *判断key是否存在 * *@paramkey键 *@returntrue存在false不存在 */ publicbooleanhasKey(Stringkey){ try{ returnredisTemplate.hasKey(key); }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *删除缓存 * *@paramkey可以传一个值或多个 */ @SuppressWarnings("unchecked") publicvoiddel(String...key){ if(key!=null&&key.length>0){ if(key.length==1){ redisTemplate.delete(key[0]); }else{ redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } //============================String============================= /** *普通缓存获取 * *@paramkey键 *@return值 */ publicObjectget(Stringkey){ returnkey==null?null:redisTemplate.opsForValue().get(key); } /** *普通缓存放入 * *@paramkey键 *@paramvalue值 *@returntrue成功false失败 */ publicbooleanset(Stringkey,Objectvalue){ try{ redisTemplate.opsForValue().set(key,value); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *普通缓存放入并设置时间 * *@paramkey键 *@paramvalue值 *@paramtime时间(秒)time要大于0如果time小于等于0将设置无限期 *@returntrue成功false失败 */ publicbooleanset(Stringkey,Objectvalue,longtime){ try{ if(time>0){ redisTemplate.opsForValue().set(key,value,time,TimeUnit.SECONDS); }else{ set(key,value); } returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *递增 * *@paramkey键 *@paramdelta要增加几(大于0) *@return */ publiclongincr(Stringkey,longdelta){ if(delta<0){ thrownewRuntimeException("递增因子必须大于0"); } returnredisTemplate.opsForValue().increment(key,delta); } /** *递减 * *@paramkey键 *@paramdelta要减少几(小于0) *@return */ publiclongdecr(Stringkey,longdelta){ if(delta<0){ thrownewRuntimeException("递减因子必须大于0"); } returnredisTemplate.opsForValue().increment(key,-delta); } //================================Map================================= /** *HashGet * *@paramkey键不能为null *@paramitem项不能为null *@return值 */ publicObjecthget(Stringkey,Stringitem){ returnredisTemplate.opsForHash().get(key,item); } /** *获取hashKey对应的所有键值 * *@paramkey键 *@return对应的多个键值 */ publicMap<Object,Object>hmget(Stringkey){ returnredisTemplate.opsForHash().entries(key); } /** *HashSet * *@paramkey键 *@parammap对应多个键值 *@returntrue成功false失败 */ publicbooleanhmset(Stringkey,Map<String,Object>map){ try{ redisTemplate.opsForHash().putAll(key,map); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *HashSet并设置时间 * *@paramkey键 *@parammap对应多个键值 *@paramtime时间(秒) *@returntrue成功false失败 */ publicbooleanhmset(Stringkey,Map<String,Object>map,longtime){ try{ redisTemplate.opsForHash().putAll(key,map); if(time>0){ expire(key,time); } returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *向一张hash表中放入数据,如果不存在将创建 * *@paramkey键 *@paramitem项 *@paramvalue值 *@returntrue成功false失败 */ publicbooleanhset(Stringkey,Stringitem,Objectvalue){ try{ redisTemplate.opsForHash().put(key,item,value); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *向一张hash表中放入数据,如果不存在将创建 * *@paramkey键 *@paramitem项 *@paramvalue值 *@paramtime时间(秒)注意:如果已存在的hash表有时间,这里将会替换原有的时间 *@returntrue成功false失败 */ publicbooleanhset(Stringkey,Stringitem,Objectvalue,longtime){ try{ redisTemplate.opsForHash().put(key,item,value); if(time>0){ expire(key,time); } returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *删除hash表中的值 * *@paramkey键不能为null *@paramitem项可以使多个不能为null */ publicvoidhdel(Stringkey,Object...item){ redisTemplate.opsForHash().delete(key,item); } /** *判断hash表中是否有该项的值 * *@paramkey键不能为null *@paramitem项不能为null *@returntrue存在false不存在 */ publicbooleanhHasKey(Stringkey,Stringitem){ returnredisTemplate.opsForHash().hasKey(key,item); } /** *hash递增如果不存在,就会创建一个并把新增后的值返回 * *@paramkey键 *@paramitem项 *@paramby要增加几(大于0) *@return */ publicdoublehincr(Stringkey,Stringitem,doubleby){ returnredisTemplate.opsForHash().increment(key,item,by); } /** *hash递减 * *@paramkey键 *@paramitem项 *@paramby要减少记(小于0) *@return */ publicdoublehdecr(Stringkey,Stringitem,doubleby){ returnredisTemplate.opsForHash().increment(key,item,-by); } //============================set============================= /** *根据key获取Set中的所有值 * *@paramkey键 *@return */ publicSet<Object>sGet(Stringkey){ try{ returnredisTemplate.opsForSet().members(key); }catch(Exceptione){ e.printStackTrace(); returnnull; } } /** *根据value从一个set中查询,是否存在 * *@paramkey键 *@paramvalue值 *@returntrue存在false不存在 */ publicbooleansHasKey(Stringkey,Objectvalue){ try{ returnredisTemplate.opsForSet().isMember(key,value); }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *将数据放入set缓存 * *@paramkey键 *@paramvalues值可以是多个 *@return成功个数 */ publiclongsSet(Stringkey,Object...values){ try{ returnredisTemplate.opsForSet().add(key,values); }catch(Exceptione){ e.printStackTrace(); return0; } } /** *将set数据放入缓存 * *@paramkey键 *@paramtime时间(秒) *@paramvalues值可以是多个 *@return成功个数 */ publiclongsSetAndTime(Stringkey,longtime,Object...values){ try{ Longcount=redisTemplate.opsForSet().add(key,values); if(time>0) expire(key,time); returncount; }catch(Exceptione){ e.printStackTrace(); return0; } } /** *获取set缓存的长度 * *@paramkey键 *@return */ publiclongsGetSetSize(Stringkey){ try{ returnredisTemplate.opsForSet().size(key); }catch(Exceptione){ e.printStackTrace(); return0; } } /** *移除值为value的 * *@paramkey键 *@paramvalues值可以是多个 *@return移除的个数 */ publiclongsetRemove(Stringkey,Object...values){ try{ Longcount=redisTemplate.opsForSet().remove(key,values); returncount; }catch(Exceptione){ e.printStackTrace(); return0; } } //===============================list================================= /** *获取list缓存的内容 * *@paramkey键 *@paramstart开始 *@paramend结束0到-1代表所有值 *@return */ publicList<Object>lGet(Stringkey,longstart,longend){ try{ returnredisTemplate.opsForList().range(key,start,end); }catch(Exceptione){ e.printStackTrace(); returnnull; } } /** *获取list缓存的长度 * *@paramkey键 *@return */ publiclonglGetListSize(Stringkey){ try{ returnredisTemplate.opsForList().size(key); }catch(Exceptione){ e.printStackTrace(); return0; } } /** *通过索引获取list中的值 * *@paramkey键 *@paramindex索引index>=0时,0表头,1第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 *@return */ publicObjectlGetIndex(Stringkey,longindex){ try{ returnredisTemplate.opsForList().index(key,index); }catch(Exceptione){ e.printStackTrace(); returnnull; } } /** *将list放入缓存 * *@paramkey键 *@paramvalue值 *@return */ publicbooleanlSet(Stringkey,Objectvalue){ try{ redisTemplate.opsForList().rightPush(key,value); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *将list放入缓存 * *@paramkey键 *@paramvalue值 *@paramtime时间(秒) *@return */ publicbooleanlSet(Stringkey,Objectvalue,longtime){ try{ redisTemplate.opsForList().rightPush(key,value); if(time>0) expire(key,time); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *将list放入缓存 * *@paramkey键 *@paramvalue值 *@return */ publicbooleanlSet(Stringkey,List<Object>value){ try{ redisTemplate.opsForList().rightPushAll(key,value); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *将list放入缓存 * *@paramkey键 *@paramvalue值 *@paramtime时间(秒) *@return */ publicbooleanlSet(Stringkey,List<Object>value,longtime){ try{ redisTemplate.opsForList().rightPushAll(key,value); if(time>0) expire(key,time); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *根据索引修改list中的某条数据 * *@paramkey键 *@paramindex索引 *@paramvalue值 *@return */ publicbooleanlUpdateIndex(Stringkey,longindex,Objectvalue){ try{ redisTemplate.opsForList().set(key,index,value); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *移除N个值为value * *@paramkey键 *@paramcount移除多少个 *@paramvalue值 *@return移除的个数 */ publiclonglRemove(Stringkey,longcount,Objectvalue){ try{ Longremove=redisTemplate.opsForList().remove(key,count,value); returnremove; }catch(Exceptione){ e.printStackTrace(); return0; } }}
     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:SpringBoot集成Redis如何使用RedisRepositories的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:python如何使用f-string中的&quot;=&quot;下一篇:

    16 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18