zoukankan      html  css  js  c++  java
  • Spring Boot 整合 Redis

    官网:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-redis

    集群文档:https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#cluster

    第一步:相关依赖引入

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

    第二步:相关配置文件配置(也可以不配置,那么就采取 Spring 默认的配置,包括地址端口号)

    #=========redis基础配置=========
    spring.redis.database=0
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    # 连接超时时间 单位 ms(毫秒)
    spring.redis.timeout=3000
    
    #=========redis线程池设置=========
    # 连接池中的最大空闲连接,默认值也是8。
    spring.redis.jedis.pool.max-idle=200
    
    #连接池中的最小空闲连接,默认值也是0。
    spring.redis.jedis.pool.min-idle=200
    
    # 如果赋值为-1,则表示不限制;pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
    spring.redis.jedis.pool.max-active=2000
    
    # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时
    spring.redis.jedis.pool.max-wait=1000

    第三步:封装 Redis 工具类(多数情况都是封装工具类,方便使用)

    package com.haitaiinc.clinicpathservice.utils;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.*;
    import org.springframework.stereotype.Component;
    
    import java.io.Serializable;
    import java.util.List;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    @Component
    public class RedisUtils {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        private static double size = Math.pow(2, 32);
    
        /**
         * 写入缓存
         *
         * @param key
         * @param offset
         * @return
         */
        public boolean setBit(String key, long offset, boolean isShow) {
            boolean result = false;
            try {
                ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
                operations.setBit(key, offset, isShow);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 写入缓存
         *
         * @param key
         * @param offset
         * @return
         */
        public boolean getBit(String key, long offset) {
            boolean result = false;
            try {
                ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
                result = operations.getBit(key, offset);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 写入缓存
         *
         * @param key
         * @param value
         * @return
         */
        public boolean set(final String key, Object value) {
            boolean result = false;
            try {
                ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
                operations.set(key, value);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 写入缓存设置时效时间
         *
         * @param key
         * @param value
         * @return
         */
        public boolean set(final String key, Object value, Long expireTime) {
            boolean result = false;
            try {
                ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
                operations.set(key, value);
                redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 批量删除对应的value
         *
         * @param keys
         */
        public void remove(final String... keys) {
            for (String key : keys) {
                remove(key);
            }
        }
    
        /**
         * 删除对应的value
         *
         * @param key
         */
        public void remove(final String key) {
            if (exists(key)) {
                redisTemplate.delete(key);
            }
        }
    
        /**
         * 判断缓存中是否有对应的value
         *
         * @param key
         * @return
         */
        public boolean exists(final String key) {
            return redisTemplate.hasKey(key);
        }
    
        /**
         * 读取缓存
         *
         * @param key
         * @return
         */
        public Object get(final String key) {
            Object result = null;
            ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
            result = operations.get(key);
            return result;
        }
    
        /**
         * 哈希 添加
         *
         * @param key
         * @param hashKey
         * @param value
         */
        public void hmSet(String key, Object hashKey, Object value) {
            HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
            hash.put(key, hashKey, value);
        }
    
        /**
         * 哈希获取数据
         *
         * @param key
         * @param hashKey
         * @return
         */
        public Object hmGet(String key, Object hashKey) {
            HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
            return hash.get(key, hashKey);
        }
    
        /**
         * 列表添加
         *
         * @param key
         * @param value
         */
        public void lPush(String key, Object value) {
            ListOperations<String, Object> list = redisTemplate.opsForList();
            list.rightPush(key, value);
        }
    
        /**
         * 列表获取
         *
         * @param key
         * @param start
         * @param end
         * @return
         */
        public List<Object> lRange(String key, long start, long end) {
            ListOperations<String, Object> list = redisTemplate.opsForList();
            return list.range(key, start, end);
        }
    
        /**
         * 集合添加
         *
         * @param key
         * @param value
         */
        public void add(String key, Object value) {
            SetOperations<String, Object> set = redisTemplate.opsForSet();
            set.add(key, value);
        }
    
        /**
         * 集合获取
         *
         * @param key
         * @return
         */
        public Set<Object> setMembers(String key) {
            SetOperations<String, Object> set = redisTemplate.opsForSet();
            return set.members(key);
        }
    
        /**
         * 有序集合添加
         *
         * @param key
         * @param value
         * @param scoure
         */
        public void zAdd(String key, Object value, double scoure) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            zset.add(key, value, scoure);
        }
    
        /**
         * 有序集合获取
         *
         * @param key
         * @param scoure
         * @param scoure1
         * @return
         */
        public Set<Object> rangeByScore(String key, double scoure, double scoure1) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            redisTemplate.opsForValue();
            return zset.rangeByScore(key, scoure, scoure1);
        }
    
        /**
         * 有序集合获取排名
         *
         * @param key   集合名称
         * @param value 值
         */
        public Long zRank(String key, Object value) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            return zset.rank(key, value);
        }
    
        /**
         * 有序集合获取排名
         *
         * @param key
         */
        public Set<ZSetOperations.TypedTuple<Object>> zRankWithScore(String key, long start, long end) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            Set<ZSetOperations.TypedTuple<Object>> ret = zset.rangeWithScores(key, start, end);
            return ret;
        }
    
        /**
         * 有序集合添加
         *
         * @param key
         * @param value
         */
        public Double zSetScore(String key, Object value) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            return zset.score(key, value);
        }
    
        /**
         * 有序集合添加分数
         *
         * @param key
         * @param value
         * @param scoure
         */
        public void incrementScore(String key, Object value, double scoure) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            zset.incrementScore(key, value, scoure);
        }
    
        /**
         * 有序集合获取排名
         *
         * @param key
         */
        public Set<ZSetOperations.TypedTuple<Object>> reverseZRankWithScore(String key, long start, long end) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            Set<ZSetOperations.TypedTuple<Object>> ret = zset.reverseRangeByScoreWithScores(key, start, end);
            return ret;
        }
    
        /**
         * 有序集合获取排名
         *
         * @param key
         */
        public Set<ZSetOperations.TypedTuple<Object>> reverseZRankWithRank(String key, long start, long end) {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            Set<ZSetOperations.TypedTuple<Object>> ret = zset.reverseRangeWithScores(key, start, end);
            return ret;
        }
    }
    封装 Redis 工具类

    第四步:测试使用

    package com.haitaiinc.clinicpathservice.controller;
    
    import com.haitaiinc.clinicpathservice.entity.UserInfo;
    import com.haitaiinc.clinicpathservice.utils.JsonUtils;
    import com.haitaiinc.clinicpathservice.utils.RedisUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @RestController
    public class TestController {
        @Autowired
        RedisUtils redisUtils;
    
        @RequestMapping("get_redis")
        public String getRedis(String key) {
            String str = (String) redisUtils.get(key);
            return str;
        }
    
        @RequestMapping("set_redis")
        public String setRedis(String key, String value) {
            boolean bool = redisUtils.set(key, value);
            if(bool){
                return "设置成功";
            }else{
                return "设置失败";
            }
        }
    
        @RequestMapping("get_user")
        public Object getUser() {
            String str = (String) redisUtils.get("admin");
            UserInfo user = JsonUtils.string2Obj(str,UserInfo.class);
            return user;
        }
    
        @RequestMapping("set_user")
        public String setUser() {
            UserInfo userInfo = new UserInfo();
            userInfo.setUserId("admin");
            userInfo.setUserName("管理员");
    
            String str = JsonUtils.obj2String(userInfo);
            boolean bool = redisUtils.set("admin", str);
            if(bool){
                return "设置成功";
            }else{
                return "设置失败";
            }
        }
    
        @RequestMapping("get_users")
        public Object getUser2() {
            List<UserInfo> list = (List<UserInfo>) redisUtils.get("user_list");
            return list;
        }
    
        @RequestMapping("set_users")
        public String setUsers() {
            UserInfo userInfo = new UserInfo();
            userInfo.setUserId("admin2");
            userInfo.setUserName("管理员2");
    
            UserInfo userInfo2 = new UserInfo();
            userInfo2.setUserId("admin3");
            userInfo2.setUserName("管理员3");
    
            List<UserInfo> list = new ArrayList<>();
            list.add(userInfo);
            list.add(userInfo2);
    
    
            boolean bool = redisUtils.set("user_list", list);
            if(bool){
                return "设置成功";
            }else{
                return "设置失败";
            }
        }
    }
    测试代码

    Redis 不仅可以 set/get 字符串,对象也是可以直接 set/get,但是需要注意的是,怎样 set,就该怎样 get

  • 相关阅读:
    2008年8月1日21世纪首次日全食奇观
    7.3午饭记
    简单漂亮的导航栏效果
    浮动居中float:center
    图片垂直居中的CSS技巧
    谷歌Chrome浏览器发布
    满江红.中秋寄远
    寄中秋月下独酌
    春江花月夜
    开始锻炼身体
  • 原文地址:https://www.cnblogs.com/jwen1994/p/12246260.html
Copyright © 2011-2022 走看看