zoukankan      html  css  js  c++  java
  • SpringBoot集成redis,存取string,list类型数据

    REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

    Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

    Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

    首先要明白redis是一个数据库,redis是一个内存数据库,所有数据基本上都存在于内存当中,会定时以追加或者快照的方式刷新到硬盘中。 

    由于redis是一个内存数据库,所以读取写入的速度是非常快的,所以经常被用来做数据,页面等的缓存。

    Redis最为常用的数据类型主要有以下:

    String

    Hash

    List

    Set

    Sorted set

    pub/sub

    Transactions

    启动redis:

    依赖:

      <!--集成redis-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-redis</artifactId>
                <version>1.4.1.RELEASE</version>
            </dependency>

    yml:

    spring:    
      redis:
        # Redis服务器地址
        host: 127.0.0.1
        # Redis服务器连接端口
        port: 6379
        # Redis服务器连接密码(默认为空)
        password:
        # Redis数据库索引(默认为0)
        database: 0
        timeout: 50000
        jedis:
          pool:
            # 连接池最大连接数(使用负值表示没有限制)
            max-active: 8
            # 连接池最大阻塞等待时间(使用负值表示没有限制)
            max-wait: -1
            # 连接池中的最大空闲连接
            max-idle: 500
            # 连接池中的最小空闲连接
            min-idle: 0
        lettuce:
          shutdown-timeout: 0

    RedisUtil类代码:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.data.redis.core.*;
    import org.springframework.stereotype.Component;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    import java.io.Serializable;
    import java.util.List;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    
    @Component
    public class RedisUtil {
    
        @Value("${spring.redis.host}")
        private String host;
        @Value("${spring.redis.password}")
        private String password;
        @Value("${spring.redis.timeout}")
        private int timeout;
        @Value("${spring.redis.port}")
        private int port;
        @Value("${spring.redis.database}")
        private int database;
        private JedisPool pool = null;
        @Value("${spring.redis.jedis.pool.max-active}")
        private int maxActive;
        @Value("${spring.redis.jedis.pool.max-wait}")
        private int maxWait;
        @Value("${spring.redis.jedis.pool.max-idle}")
        private int maxIdle;
        @Value("${spring.redis.jedis.pool.min-idle}")
        private int minIdle;
    
        /**
         * 开启redis
         *
         * @param
         * @param
         * @return
         */
        public Jedis getJedis() {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(maxActive);//大连接数
            config.setMaxIdle(maxIdle);//大空闲实例数
            config.setMaxWaitMillis(maxWait);//等连接池给连接的大时间,毫秒
            config.setTestOnBorrow(true);//个实例的时,是否提前vaildate操作
            System.out.println("--------------" + host);
            pool = new JedisPool(config, host, port, timeout);
            if (pool != null) {
                return pool.getResource();
            } else {
                return null;
            }
        }
    
        /**
         * 关闭redis
         *
         * @param
         * @param
         * @return
         */
        public void close(final Jedis redis) {
            if (redis != null) {
                redis.close();
            }
        }
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        /**
         * 写入缓存
         *
         * @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, TimeUnit timeUnit) {
            boolean result = false;
            try {
                ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
                operations.set(key, value);
                redisTemplate.expire(key, expireTime, timeUnit);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 批量删除对应的value
         *
         * @param keys
         */
        public void remove(final String... keys) {
            for (String key : keys) {
                remove(key);
            }
        }
    
        /**
         * 批量删除key
         *
         * @param pattern
         */
        public void removePattern(final String pattern) {
            Set<Serializable> keys = redisTemplate.keys(pattern);
            if (keys.size() > 0) {
                redisTemplate.delete(keys);
            }
        }
    
        /**
         * 删除对应的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 k
         * @param v
         */
        public void lPush(String k, Object v) {
            ListOperations<String, Object> list = redisTemplate.opsForList();
            list.rightPush(k, v);
        }
    
        /**
         * 列表获取
         *
         * @param k
         * @param l
         * @param l1
         * @return
         */
        public List<Object> lRange(String k, long l, long l1) {
            ListOperations<String, Object> list = redisTemplate.opsForList();
            return list.range(k, l, l1);
        }
    
        /**
         * 集合添加
         *
         * @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();
            return zset.rangeByScore(key, scoure, scoure1);
        }
    
        /**
         * 存取List集合
         *
         * @param key List<?> list
         * @return
         */
        public void setList(String key, List<?> list) {
    
            Jedis jedis = getJedis();
    
            try {
                if (list == null || list.size() == 0) {
                    jedis.set(key.getBytes(), "".getBytes());
                } else {//如果list为空,则设置一个空
                    jedis.set(key.getBytes(), SerializeUtilList.serializeList(list));
    
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                jedis.close();
            }
    
        }
    
        /**
         * 获取List集合
         *
         * @param key
         * @return
         */
        public List<?> getList(String key) {
            Jedis jedis = getJedis();
            if (jedis == null || !jedis.exists(key)) {
                return null;
            }
            byte[] data = jedis.get(key.getBytes());
            jedis.close();
            return SerializeUtilList.unserializeList(data);
        }
    
    
    }

    序列化代码:

    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class SerializeUtilList {
    
        /**
         * 序列化 list 集合
         *
         * @param list
         * @return
         */
        public static byte[] serializeList(List<?> list) {
            if (list == null || list.size() == 0) {
                return null;
            }
            ObjectOutputStream oos = null;
            ByteArrayOutputStream baos = null;
            byte[] bytes = null;
            try {
                baos = new ByteArrayOutputStream();
                oos = new ObjectOutputStream(baos);
                for (Object obj : list) {
                    oos.writeObject(obj);
                }
                bytes = baos.toByteArray();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                close(oos);
                close(baos);
            }
            return bytes;
        }
    
        /**
         * 反序列化 list 集合
         *
         * @param
         * @return
         */
        public static List<?> unserializeList(byte[] bytes) {
            if (bytes == null) {
                return null;
            }
            List<Object> list = new ArrayList<Object>();
            ByteArrayInputStream bais = null;
            ObjectInputStream ois = null;
            try {
                // 反序列化
                bais = new ByteArrayInputStream(bytes);
                ois = new ObjectInputStream(bais);
                while (bais.available() > 0) {
                    Object obj = (Object) ois.readObject();
                    if (obj == null) {
                        break;
                    }
                    list.add(obj);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                close(bais);
                close(ois);
            }
            return list;
        }
    
    
        public static void close(Closeable closeable) {
            if (closeable != null) {
                try {
                    closeable.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    }

    RedisController测试代码:

    @RestController
    @RequestMapping("redis")
    public class RedisController {
    
        @Autowired
        public RedisUtil rs;
    
        // redis查询接口
        @RequestMapping("/getRedisData")
        @ResponseBody
        public List getRedis(){
    
            List listReis = rs.getList("wanli");
            if(listReis == null ){
                List list = new ArrayList();
                list.add(1);
                list.add(2);
                rs.setList("wanli",list);
            }
            return listReis;
        }
    
    
    }
  • 相关阅读:
    CSS去掉 a 标签点击后出现的虚线框
    AMD 和 CMD的区别
    sublime text常用快捷键
    jsonp详解
    JSON详解
    JS知识总结
    input 单选按钮radio 取消选中(转载)
    koala 编译scss不支持中文解决方案
    Spring事务的传播行为 @Transactional(转)
    Ubuntu下JDK+Tomcat+MySql环境的搭建
  • 原文地址:https://www.cnblogs.com/wanlige/p/14789045.html
Copyright © 2011-2022 走看看