千家信息网

SpringBoot集成Redis如何使用RedisRepositories

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇"SpringBoot集成Redis如何使用RedisRepositories"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完
千家信息网最后更新 2024年11月18日SpringBoot集成Redis如何使用RedisRepositories

这篇"SpringBoot集成Redis如何使用RedisRepositories"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"SpringBoot集成Redis如何使用RedisRepositories"文章吧。

    SpringBoot集成Redis

    1.添加redis依赖

      org.springframework.boot  spring-boot-starter-data-redis  org.apache.commons  commons-pool2

    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中的数据@SpringBootApplicationpublic class RedisApplication {     public static void main(String[] args) {        SpringApplication.run(RedisApplication.class, args);    } }

    4.创建实体类Entity

    @Data@RedisHash("user")//RedisHash非常重要//user表示在redis中新建user集合//之后所有的UserEntity的保存操作全部会保存在user这个集合中//保存时Key的格式为--user:idpublic class UserEntity{    @Id    private Long id;     private String name;     private Integer age;     private Date createTime = new Date();}

    5.创建Dao层——数据操作层

    @Repositorypublic interface UserDao extends CrudRepository {}

    6.创建Service层——服务层

    @Servicepublic class UserService {     @Autowired    private UserDao userDao; //因为使用了RedisRepositories,所以简单的crud将不用使用RedisTemplate//    @Autowired//    private RedisTemplate redisTemplate;      /**     * 按user:id的方式存入redis     * @param user     */    public void save(UserEntity user){        //redisTemplate.opsForValue().set(new Random().nextDouble() + "",user);         userDao.save(user);     }     /**     * 根据key从redis中查找对应value     * @param id     * @return     */    public UserEntity findOne(Long id){         //UserEntity user = (UserEntity) redisTemplate.opsForValue().get(key);         UserEntity user = userDao.findById(id).get();         return user;    }}

    7.创建Controller层——控制层

    @RestController@RequestMapping("user")public class UserController {     @Autowired    private UserService userService;     /**     * 保存到redis中     * @return     */    @GetMapping("save")    public String save(){         UserEntity user = new UserEntity();         user.setName(String.valueOf(new Random().nextInt(100000)));         user.setAge(new Random().nextInt(100000));         userService.save(user);         System.out.println(user.toString());         return "success";    }     /**     * 根据key从redis中查找value     * @param id     * @return     */    @GetMapping("find/{id}")    public String find(@PathVariable Long id){       UserEntity user = userService.findOne(id);         System.out.println(user);        return "success";    }}

    8.redis配置类

    @Configurationpublic class RedisConfig {     @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {        RedisTemplate template = new RedisTemplate();        template.setConnectionFactory(factory);        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);        ObjectMapper om = new ObjectMapper();        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);        jackson2JsonRedisSerializer.setObjectMapper(om);        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        // key采用String的序列化方式        template.setKeySerializer(stringRedisSerializer);        // hash的key也采用String的序列化方式        template.setHashKeySerializer(stringRedisSerializer);        // value序列化方式采用jackson        template.setValueSerializer(jackson2JsonRedisSerializer);        // hash的value序列化方式采用jackson        template.setHashValueSerializer(jackson2JsonRedisSerializer);        template.afterPropertiesSet();        return template;    }}

    Redis中的结构为

    redis封装工具类

    @Componentpublic class RedisUtils {         @Autowired        private RedisTemplate redisTemplate;         // =============================common============================         /**         * 指定缓存失效时间         *         * @param key  键         * @param time 时间(秒)         * @return         */        public boolean expire(String key, long time) {                try {                        if (time > 0) {                                redisTemplate.expire(key, time, TimeUnit.SECONDS);                        }                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 根据key 获取过期时间         *         * @param key 键 不能为null         * @return 时间(秒) 返回0代表为永久有效         */        public long getExpire(String key) {                return redisTemplate.getExpire(key, TimeUnit.SECONDS);        }         /**         * 判断key是否存在         *         * @param key 键         * @return true 存在 false不存在         */        public boolean hasKey(String key) {                try {                        return redisTemplate.hasKey(key);                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 删除缓存         *         * @param key 可以传一个值 或多个         */        @SuppressWarnings("unchecked")        public void del(String... key) {                if (key != null && key.length > 0) {                        if (key.length == 1) {                                redisTemplate.delete(key[0]);                        } else {                                redisTemplate.delete(CollectionUtils.arrayToList(key));                        }                }        }        // ============================String=============================         /**         * 普通缓存获取         *         * @param key 键         * @return 值         */        public  Object get(String key) {                return key == null ? null : redisTemplate.opsForValue().get(key);        }         /**         * 普通缓存放入         *         * @param key   键         * @param value 值         * @return true成功 false失败         */        public boolean set(String key, Object value) {                try {                        redisTemplate.opsForValue().set(key, value);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 普通缓存放入并设置时间         *         * @param key   键         * @param value 值         * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期         * @return true成功 false 失败         */        public boolean set(String key, Object value, long time) {                try {                        if (time > 0) {                                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);                        } else {                                set(key, value);                        }                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 递增         *         * @param key   键         * @param delta 要增加几(大于0)         * @return         */        public long incr(String key, long delta) {                if (delta < 0) {                        throw new RuntimeException("递增因子必须大于0");                }                return redisTemplate.opsForValue().increment(key, delta);        }         /**         * 递减         *         * @param key   键         * @param delta 要减少几(小于0)         * @return         */        public long decr(String key, long delta) {                if (delta < 0) {                        throw new RuntimeException("递减因子必须大于0");                }                return redisTemplate.opsForValue().increment(key, -delta);        }        // ================================Map=================================         /**         * HashGet         *         * @param key  键 不能为null         * @param item 项 不能为null         * @return 值         */        public Object hget(String key, String item) {                return redisTemplate.opsForHash().get(key, item);        }         /**         * 获取hashKey对应的所有键值         *         * @param key 键         * @return 对应的多个键值         */        public Map hmget(String key) {                return redisTemplate.opsForHash().entries(key);        }         /**         * HashSet         *         * @param key 键         * @param map 对应多个键值         * @return true 成功 false 失败         */        public boolean hmset(String key, Map map) {                try {                        redisTemplate.opsForHash().putAll(key, map);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * HashSet 并设置时间         *         * @param key  键         * @param map  对应多个键值         * @param time 时间(秒)         * @return true成功 false失败         */        public boolean hmset(String key, Map map, long time) {                try {                        redisTemplate.opsForHash().putAll(key, map);                        if (time > 0) {                                expire(key, time);                        }                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 向一张hash表中放入数据,如果不存在将创建         *         * @param key   键         * @param item  项         * @param value 值         * @return true 成功 false失败         */        public boolean hset(String key, String item, Object value) {                try {                        redisTemplate.opsForHash().put(key, item, value);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 向一张hash表中放入数据,如果不存在将创建         *         * @param key   键         * @param item  项         * @param value 值         * @param time  时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间         * @return true 成功 false失败         */        public boolean hset(String key, String item, Object value, long time) {                try {                        redisTemplate.opsForHash().put(key, item, value);                        if (time > 0) {                                expire(key, time);                        }                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 删除hash表中的值         *         * @param key  键 不能为null         * @param item 项 可以使多个 不能为null         */        public void hdel(String key, Object... item) {                redisTemplate.opsForHash().delete(key, item);        }         /**         * 判断hash表中是否有该项的值         *         * @param key  键 不能为null         * @param item 项 不能为null         * @return true 存在 false不存在         */        public boolean hHasKey(String key, String item) {                return redisTemplate.opsForHash().hasKey(key, item);        }         /**         * hash递增 如果不存在,就会创建一个 并把新增后的值返回         *         * @param key  键         * @param item 项         * @param by   要增加几(大于0)         * @return         */        public double hincr(String key, String item, double by) {                return redisTemplate.opsForHash().increment(key, item, by);        }         /**         * hash递减         *         * @param key  键         * @param item 项         * @param by   要减少记(小于0)         * @return         */        public double hdecr(String key, String item, double by) {                return redisTemplate.opsForHash().increment(key, item, -by);        }        // ============================set=============================         /**         * 根据key获取Set中的所有值         *         * @param key 键         * @return         */        public Set sGet(String key) {                try {                        return redisTemplate.opsForSet().members(key);                } catch (Exception e) {                        e.printStackTrace();                        return null;                }        }         /**         * 根据value从一个set中查询,是否存在         *         * @param key   键         * @param value 值         * @return true 存在 false不存在         */        public boolean sHasKey(String key, Object value) {                try {                        return redisTemplate.opsForSet().isMember(key, value);                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 将数据放入set缓存         *         * @param key    键         * @param values 值 可以是多个         * @return 成功个数         */        public long sSet(String key, Object... values) {                try {                        return redisTemplate.opsForSet().add(key, values);                } catch (Exception e) {                        e.printStackTrace();                        return 0;                }        }         /**         * 将set数据放入缓存         *         * @param key    键         * @param time   时间(秒)         * @param values 值 可以是多个         * @return 成功个数         */        public long sSetAndTime(String key, long time, Object... values) {                try {                        Long count = redisTemplate.opsForSet().add(key, values);                        if (time > 0)                                expire(key, time);                        return count;                } catch (Exception e) {                        e.printStackTrace();                        return 0;                }        }         /**         * 获取set缓存的长度         *         * @param key 键         * @return         */        public long sGetSetSize(String key) {                try {                        return redisTemplate.opsForSet().size(key);                } catch (Exception e) {                        e.printStackTrace();                        return 0;                }        }         /**         * 移除值为value的         *         * @param key    键         * @param values 值 可以是多个         * @return 移除的个数         */        public long setRemove(String key, Object... values) {                try {                        Long count = redisTemplate.opsForSet().remove(key, values);                        return count;                } catch (Exception e) {                        e.printStackTrace();                        return 0;                }        }        // ===============================list=================================         /**         * 获取list缓存的内容         *         * @param key   键         * @param start 开始         * @param end   结束 0 到 -1代表所有值         * @return         */        public List lGet(String key, long start, long end) {                try {                        return redisTemplate.opsForList().range(key, start, end);                } catch (Exception e) {                        e.printStackTrace();                        return null;                }        }         /**         * 获取list缓存的长度         *         * @param key 键         * @return         */        public long lGetListSize(String key) {                try {                        return redisTemplate.opsForList().size(key);                } catch (Exception e) {                        e.printStackTrace();                        return 0;                }        }         /**         * 通过索引 获取list中的值         *         * @param key   键         * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推         * @return         */        public Object lGetIndex(String key, long index) {                try {                        return redisTemplate.opsForList().index(key, index);                } catch (Exception e) {                        e.printStackTrace();                        return null;                }        }         /**         * 将list放入缓存         *         * @param key   键         * @param value 值         * @return         */        public boolean lSet(String key, Object value) {                try {                        redisTemplate.opsForList().rightPush(key, value);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 将list放入缓存         *         * @param key   键         * @param value 值         * @param time  时间(秒)         * @return         */        public boolean lSet(String key, Object value, long time) {                try {                        redisTemplate.opsForList().rightPush(key, value);                        if (time > 0)                                expire(key, time);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 将list放入缓存         *         * @param key   键         * @param value 值         * @return         */        public boolean lSet(String key, List value) {                try {                        redisTemplate.opsForList().rightPushAll(key, value);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 将list放入缓存         *         * @param key   键         * @param value 值         * @param time  时间(秒)         * @return         */        public boolean lSet(String key, List value, long time) {                try {                        redisTemplate.opsForList().rightPushAll(key, value);                        if (time > 0)                                expire(key, time);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 根据索引修改list中的某条数据         *         * @param key   键         * @param index 索引         * @param value 值         * @return         */        public boolean lUpdateIndex(String key, long index, Object value) {                try {                        redisTemplate.opsForList().set(key, index, value);                        return true;                } catch (Exception e) {                        e.printStackTrace();                        return false;                }        }         /**         * 移除N个值为value         *         * @param key   键         * @param count 移除多少个         * @param value 值         * @return 移除的个数         */        public long lRemove(String key, long count, Object value) {                try {                        Long remove = redisTemplate.opsForList().remove(key, count, value);                        return remove;                } catch (Exception e) {                        e.printStackTrace();                        return 0;                }        }}

    以上就是关于"SpringBoot集成Redis如何使用RedisRepositories"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

    0