前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RedisPool操作Redis,工具类实例

RedisPool操作Redis,工具类实例

作者头像
生活创客
发布2018-01-30 17:38:26
1.7K0
发布2018-01-30 17:38:26
举报
文章被收录于专栏:技术记录技术记录
代码语言:js
复制
redis.properties
配置文件内容
redis.pool.maxActive=100
redis.pool.maxIdle=20
redis.pool.maxWait=3000
redis.pool.testOnBorrow=false
redis.pool.testOnReturn=false


redis.ip=127.0.0.1
redis.port=6379
redis.port1=6380
redis.password=****



package com.szreach.rcrp.redis;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;

import org.apache.log4j.Logger;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class RedisUtil {

    private static final Logger log = Logger.getLogger(RedisUtil.class);
    private static JedisPool jedisPool = null;
    private static ShardedJedisPool shardedJedisPool = null;
    /**
     * 初始化Redis连接池
     */
    static {
        try {
            // 加载redis配置文件
            ResourceBundle bundle = ResourceBundle.getBundle("redis");
            if (bundle == null) {
                throw new IllegalArgumentException(
                        "[redis.properties] is not found!");
            }
            int maxActivity = Integer.valueOf(bundle
                    .getString("redis.pool.maxActive"));
            int maxIdle = Integer.valueOf(bundle
                    .getString("redis.pool.maxIdle"));
            long maxWait = Long.valueOf(bundle.getString("redis.pool.maxWait"));
            boolean testOnBorrow = Boolean.valueOf(bundle
                    .getString("redis.pool.testOnBorrow"));
            boolean onreturn = Boolean.valueOf(bundle
                    .getString("redis.pool.testOnReturn"));
            // 创建jedis池配置实例
            JedisPoolConfig config = new JedisPoolConfig();
            // 设置池配置项值
            config.setMaxActive(maxActivity);
            config.setMaxIdle(maxIdle);  //最大空闲连接数
            config.setMaxWait(maxWait);
            config.setTestOnBorrow(testOnBorrow);
            config.setTestOnReturn(onreturn);
            jedisPool = new JedisPool(config, bundle.getString("redis.ip"),
                    Integer.valueOf(bundle.getString("redis.port")), 10000,
                    bundle.getString("redis.password"));
            // slave链接
            List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
            shards.add(new JedisShardInfo(bundle.getString("redis.ip"), Integer
                    .valueOf(bundle.getString("redis.port1"))));
            shardedJedisPool = new ShardedJedisPool(config, shards);
            log.info("初始化Redis连接池success");
        } catch (Exception e) {
            log.error("初始化Redis连接池 出错!", e);
        }
    }

    /**
     * 获取Jedis实例
     * 
     * @return
     */
    public synchronized static Jedis getJedis() {
        try {
            if (jedisPool != null) {
                Jedis resource = jedisPool.getResource();
                return resource;
            } else {
                return null;
            }
        } catch (Exception e) {
            log.error("Redis缓存获取Jedis实例 出错!", e);
            return null;
        }
    }

    /**
     * 获取shardedJedis实例
     * 
     * @return
     */
    public static ShardedJedis getShardedJedis() {
        try {
            if (shardedJedisPool != null) {
                ShardedJedis resource = shardedJedisPool.getResource();
                return resource;
            } else {
                return null;
            }
        } catch (Exception e) {
            log.error("Redis缓存获取shardedJedis实例 出错!", e);
            return null;
        }
    }

    /**
     * 释放jedis资源
     * 
     * @param jedis
     */
    public static void returnResource(final Jedis jedis) {
        if (jedis != null) {
            jedisPool.returnResource(jedis);
        }
    }

    /**
     * 释放shardedJedis资源
     * 
     * @param jedis
     */
    public static void returnResource(final ShardedJedis shardedJedis) {
        if (shardedJedis != null) {
            shardedJedisPool.returnResource(shardedJedis);
        }
    }

    /**
     * 向缓存中设置字符串内容
     * 
     * @param key
     *            key
     * @param value
     *            value
     * @return
     * @throws Exception
     */
    public static boolean set(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            if(jedis != null){
                jedis.set(key, value);
            }
            return true;
        } catch (Exception e) {
            log.error("Redis缓存设置key值 出错!", e);
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * 判断key是否存在
     */
    public static boolean exists(String key){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis == null) {
                return false;
            } else {
                return jedis.exists(key);
            }
        } catch (Exception e) {
            log.error("Redis缓存判断key是否存在 出错!", e);
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * 删除缓存中的对象,根据key
     * @param key
     * @return
     */
    public static boolean del(String key) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.del(key);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    
    //*******************key-value****************start
    
    /**
     * 向缓存中设置对象
     * 
     * @param key
     * @param value
     * @return
     */
    public static boolean set(String key, Object value) {
        Jedis jedis = null;
        try {
            String objectJson = JSONObject.fromObject(value).toString();
            jedis = getJedis();
            if (jedis != null) {
                jedis.set(key, objectJson);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }

    /**
     * 根据key 获取内容
     * 
     * @param key
     * @return
     */
    public static Object get(String key) {
        ShardedJedis jedis = null;
        try {
            jedis = shardedJedisPool.getResource();
            Object value = jedis.get(key);
            return value;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            shardedJedisPool.returnResource(jedis);
        }
    }
    
    /**
     * 根据key 获取对象
     * 
     * @param key
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T get(String key, Class<T> clazz) {
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                return (T) JSONObject.toBean(JSONObject.fromObject(jedis.get(key)), clazz);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    //*******************key-value****************end
    
    //*************** 操作list****************start
    /**
     * 向缓存中设置对象 
     * @param key
     * @param list
     * T string calss
     * @return
     */
    public static <T> boolean setList(String key,List<T> list){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            if (jedis != null) {
                for (T vz : list) {
                    if (vz instanceof String) {
                        jedis.lpush(key, (String) vz);
                    } else {
                        String objectJson = JSONObject.fromObject(vz).toString();
                        jedis.lpush(key, objectJson);
                    }
                }
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    
    @SuppressWarnings("unchecked")
    public static <T> List<T> getListEntity(String key,Class<T> entityClass){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                List<String> valueJson = jedis.lrange(key, 0, -1);
                JSONArray json = new JSONArray();
                json.addAll(valueJson);
                JSONArray jsonArray = JSONArray.fromObject(json.toString());
                return (List<T>) JSONArray.toCollection(jsonArray, entityClass);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    public static List<String> getListString(String key){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                return jedis.lrange(key, 0, -1);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    //*************** 操作list****************end
    
    //*************** 操作map****************start
    public static <K,V> boolean setMap(String key,Map<String,V> map){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            if (jedis != null) {
                Set<Map.Entry<String, V>> entry = map.entrySet();
                for (Iterator<Map.Entry<String, V>> ite = entry.iterator(); ite.hasNext();) {
                    Map.Entry<String, V> kv = ite.next();
                    if (kv.getValue() instanceof String) {
                        jedis.hset(key, kv.getKey(), (String) kv.getValue());
                    }else if (kv.getValue() instanceof List) {
                        jedis.hset(key, kv.getKey(), JSONArray.fromObject(kv.getValue()).toString());
                    } else {
                        jedis.hset(key, kv.getKey(), JSONObject.fromObject(kv.getValue()).toString());
                    }
                }
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    public static boolean setMapKey(String key,String mapKey,Object value){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            if (jedis != null) {
                if (value instanceof String) {
                    jedis.hset(key, mapKey, String.valueOf(value));
                } else if (value instanceof List) {
                    jedis.hset(key, mapKey, JSONArray.fromObject(value).toString());
                } else {
                    jedis.hset(key, mapKey, JSONObject.fromObject(value).toString());
                }
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * seconds key和value 保存的有效时间(单位:秒)
     * @return
     */
    public static boolean setMapKeyExpire(String key,String mapKey,Object value, int seconds){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            if (jedis != null) {
                if (value instanceof String) {
                    jedis.hset(key, mapKey, String.valueOf(value));
                } else if (value instanceof List) {
                    jedis.hset(key, mapKey, JSONArray.fromObject(value).toString());
                } else {
                    jedis.hset(key, mapKey, JSONObject.fromObject(value).toString());
                }
                jedis.expire(key, seconds);
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    @SuppressWarnings("unchecked")
    public static <K,V> Map<String,V> getMap(String key){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                Map<String, V> map = (Map<String, V>) jedis.hgetAll(key);
                return map;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    @SuppressWarnings("unchecked")
    public static <K,V> Map<String,V> getMapEntityClass(String key,Class<V> clazz){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                Map<String, V> map = (Map<String, V>) jedis.hgetAll(key);
                Set<Map.Entry<String, V>> entry = map.entrySet();
                for (Iterator<Map.Entry<String, V>> ite = entry.iterator(); ite.hasNext();) {
                    Map.Entry<String, V> kv = ite.next();
                    map.put(kv.getKey(), (V) JSONObject.toBean(JSONObject.fromObject(kv.getValue()), clazz));
                }
                return map;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    @SuppressWarnings("unchecked")
    public static <K,V> Map<String,List<V>> getMapList(String key,Class<V> clazz){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                Map<String, V> map = (Map<String, V>) jedis.hgetAll(key);
                Set<Map.Entry<String, V>> entry = map.entrySet();
                for (Iterator<Map.Entry<String, V>> ite = entry.iterator(); ite.hasNext();) {
                    Map.Entry<String, V> kv = ite.next();
                    JSONArray jsonArray = JSONArray.fromObject(kv.getValue());
                    map.put(kv.getKey(), (V) JSONArray.toCollection(jsonArray, clazz));
                }
                return (Map<String, List<V>>) map;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    @SuppressWarnings("unchecked")
    public static <T> List<T> getMapKeyListEntity(String key,String mapKey,
            Class<T> entityClass){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if (jedis != null) {
                String valueJson = jedis.hget(key, mapKey);
                JSONArray jsonArray = JSONArray.fromObject(valueJson);
                return (List<T>) JSONArray.toCollection(jsonArray, entityClass);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    @SuppressWarnings("unchecked")
    public static <T> T getMapKeyEntity(String key,String mapKey,
            Class<T> entityClass){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if(jedis != null){
            String valueJson=jedis.hget(key, mapKey);
            return (T) JSONObject.toBean(JSONObject.fromObject(valueJson), entityClass);
            }else{return null;}
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    public static Object getMapKey(String key,String mapKey){
        ShardedJedis jedis = null;
        try {
            jedis = getShardedJedis();
            if(jedis != null){
            return jedis.hget(key, mapKey);
            }else{return null;}
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    public static boolean delMapKey(String key,String mapKey){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.hdel(key, mapKey);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    public static boolean hexists(String key,String mapKey){
        ShardedJedis jedis = null;
        try {
            jedis = shardedJedisPool.getResource();
            return jedis.hexists(key,mapKey);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            shardedJedisPool.returnResource(jedis);
        }
    }
    //*************** 操作map****************end
    
    //***************计数器应用INCR,DECR****************begin
    //Redis的命令都是原子性的,你可以轻松地利用INCR,DECR命令来构建计数器系统
    
    /**
     * incr(key):名称为key的string增1操作
     */
    public static boolean incr(String key){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.incr(key);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * incrby(key, integer):名称为key的string增加integer
     */
    public static boolean incrBy(String key, int value){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.incrBy(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * decr(key):名称为key的string减1操作
     */
    public static boolean decr(String key){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.decr(key);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * decrby(key, integer):名称为key的string减少integer
     */
    public static boolean decrBy(String key, int value){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.decrBy(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    //***************计数器应用INCR,DECR****************end
    
    //***************使用sorted set(zset)甚至可以构建有优先级的队列系统***************begin
    /**
     * 向名称为key的zset中添加元素member,score用于排序。
     * 如果该元素已经存在,则根据score更新该元素的顺序
     */
    public static boolean zadd(String key, double score, String member){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.zadd(key, score, member);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * 删除名称为key的zset中的元素member
     */
    public static boolean zrem(String key, String... members){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.zrem(key, members);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * 返回集合中score在给定区间的元素
     */
    public static Set<String> zrangeByScore(String key, double min, double max){
        ShardedJedis jedis = null;
        try {
            jedis = shardedJedisPool.getResource();
            return jedis.zrangeByScore(key, min, max);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    //***************使用sorted set(zset)甚至可以构建有优先级的队列系统***************end
    
    //***************sorted set 处理***************************************begin
    //zset 处理
    public static boolean zaddObject(String key, double score, Object value){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            String objectJson = JSONObject.fromObject(value).toString();
            jedis.zadd(key, score, objectJson);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * score值递减(从大到小)次序排列。
     * @param key
     * @param max score
     * @param min score
     * @param entityClass
     * @return
     */
    @SuppressWarnings("unchecked")
    public static  <T> List<T> zrevrangeByScore(String key,double max,double min, 
            Class<T> entityClass){
        ShardedJedis jedis = null;
        try {
            jedis =shardedJedisPool.getResource();
            Set<String> set=jedis.zrevrangeByScore(key, max, min);
            List<T> list=new ArrayList<T>();
            for (String str : set) {  
                list.add((T) JSONObject.toBean(JSONObject.fromObject(str), entityClass));
            } 
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    /**
     * score值递减(从大到小)次序排列。
     * @param key
     * @param max score
     * @param min score
     * @param offset count (类似mysql的 LIMIT)
     * @param entityClass
     * @return
     */
    @SuppressWarnings("unchecked")
    public static  <T> List<T> zrevrangeByScore(String key,double max,double min,
            int offset, int count,Class<T> entityClass){
        ShardedJedis jedis = null;
        try {
            jedis =shardedJedisPool.getResource();
            Set<String> set=jedis.zrevrangeByScore(key, max, min,offset,count);
            List<T> list=new ArrayList<T>();
            for (String str : set) {  
                list.add((T) JSONObject.toBean(JSONObject.fromObject(str), entityClass));
            } 
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            returnResource(jedis);
        }
    }
    
    
    //得到总记录数
    public static long zcard(String key){
        ShardedJedis jedis = null;
        try {
            jedis =shardedJedisPool.getResource();
            return jedis.zcard(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        } finally {
            returnResource(jedis);
        }
    }
    
    //删除 元素
    public static  boolean zremObject(String key, Object value){
        Jedis jedis = null;
        try {
            jedis = getJedis();
            String objectJson = JSONObject.fromObject(value).toString();
            jedis.zrem(key, objectJson);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }
    
    //统计zset集合中score某个范围内(1-5),元素的个数
    public static long zcount(String key,double min, double max){
        ShardedJedis jedis = null;
        try {
            jedis =shardedJedisPool.getResource();
            return jedis.zcount(key,min,max);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        } finally {
            returnResource(jedis);
        }
    }
    
    //查看zset集合中元素的score
    public static double zscore(String key,Object value){
        ShardedJedis jedis = null;
        try {
            jedis =shardedJedisPool.getResource();
            String objectJson = JSONObject.fromObject(value).toString();
            return jedis.zscore(key,objectJson);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        } finally {
            returnResource(jedis);
        }
    }
    //**************sorted set******************************************end
    
    //***********************Redis Set集合操作**************************begin
    /**
     * sadd:向名称为Key的set中添加元素,同一集合中不能出现相同的元素值。(用法:sadd set集合名称 元素值)
     * @param key
     * @param value
     * @return
     */
    public static boolean sadd(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.sadd(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }

    /**
     * srem:删除名称为key的set中的元素。(用法:srem set集合名称 要删除的元素值)
     * 
     * @param key
     * @param value
     * @return
     */
    public static boolean srem(String key, String value) {
        Jedis jedis = null;
        try {
            jedis = getJedis();
            jedis.srem(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }

    /**
     * sdiff:返回所有给定key与第一个key的差集。(用法:sdiff set集合1 set集合2)
     * 
     * @param key1
     * @param key2
     * @return
     */
    public static Set<String> sdiff(String key1, String key2) {
        Jedis jedis = null;
        Set<String> diffList = null;
        try {
            jedis = getJedis();
            diffList = jedis.sdiff(key1, key2);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            returnResource(jedis);
        }
        return diffList;
    }

    /**
     * sismember:判断某个值是否是集合的元素。(用法:sismember 集合1 指定的元素值)
     * 
     * @param key
     * @param value
     * @return
     */
    public static boolean sismember(String key, String value) {
        ShardedJedis jedis = null;
        try {
            jedis = shardedJedisPool.getResource();
            return jedis.sismember(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            returnResource(jedis);
        }
    }

    /**
     * smembers(key) :返回名称为key的set的所有元素
     * 
     * @param key
     * @return
     */
    public static Set<String> smembers(String key) {
        Jedis jedis = null;
        Set<String> list = null;
        try {
            jedis = getJedis();
            list = jedis.smembers(key);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            returnResource(jedis);
        }
        return list;
    }
    
    //***********************Redis Set集合操作****************************end
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-04-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档