Redis常用方法

首先构建非切片连接池jedisPool对象,写好配置redis连接的方法。

/**
     * 构建redis切片连接池
     * 
     * @param ip
     * @param port
     * @return JedisPool
     */
    public static JedisPool getJedisPool() {
        if (jedisPool == null) {
            synchronized (lock) {
                //redis服务器对应的IP和端口
                String redisIp = PropertiesUtils.getProperties("REDIS_SERVER_IP");
                Integer redisPort = Integer.valueOf(PropertiesUtils.getProperties("REDIS_SERVER_PORT"));
                if (jedisPool == null) {
                    JedisPoolConfig config = new JedisPoolConfig();
                    //设置连接池初始化大小和最大容量
                    
                    // 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
                    // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
                    config.setMaxTotal(-1);
                    // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
                    config.setMaxIdle(1000);
                    // 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
                    config.setMaxWaitMillis(1000 * 30);
                    // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
                    config.setTestOnBorrow(true);
                    //
                    jedisPool = new JedisPool(config, redisIp, redisPort,DEFAULT_TIME_OUT);
                    
                }
            }
        }
        return jedisPool;
    }

我们都知道redis是key,value型就当它是内存数据库把,虽然一般常用于数据缓存,毕竟你往内存中放几千万条数据会弄爆- -(虽然我就是要这么干)  下来,根据key获取value

 
    /**
     * 获取数据
     * 
     * @param key
     * @return
     */
    public static String getForString(String key){
        List<String> values = mgetForString(key);
        if(values == null) {
            return null;
        } else {
            return values.get(0);
        }
    }

也可根据key获取value的集合

 /**
     * 获取数据
     * 
     * @param key
     * @return
     */
    public static List<String> mgetForString(String... key){
        List<String> value = null;
        JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            value = jedis.mget(key);
        } catch (Exception e) {
            log.error(e);
        } finally {
            //返还到连接池
            returnJedisResource(jedis);
        }
        return value;
    }

将数据加载到redis中的方法 一般是用set. 如下列方法,这里指定value是String类型,也是因为我的业务关系把value转成了json串~

public static void setForString(String key,String value){
           JedisPool pool = null;
        Jedis jedis = null;
       try {
           pool = getJedisPool();
           jedis = pool.getResource();
           jedis.set(key, value);
       } catch (Exception e) {
           log.error(e);
       } finally {
           //返还到连接池
             returnJedisResource(jedis);
       }
       
   }

也可获取哈希结构的字段和值

/**
     * 设置哈希结构的字段和值
     * @param key
     * @param value
     */
    public static void setForHashObj(String key, Map<String, String> value) {
        JedisPool pool = null;
        Jedis jedis = null;
        try {
            pool = getJedisPool();
            jedis = pool.getResource();
            jedis.hmset(key, value);
        } catch (Exception e) {
            log.error(e);
        } finally {
            // 返还到连接池
            returnJedisResource(jedis);
        }
    }

这里的Map也可以改为List<Map<String, String>> values,其实一样的~然后再遍历这个Map即可~

### Redis 常用方法及使用示例 Redis 是一种高性能的键值存储系统,支持多种数据结构操作。以下是 Redis 的一些常用方法及其使用示例: #### 1. 字符串(String)操作 ```python # 设置字符串值 SET mykey "Hello" # 将键 mykey 的值设置为 "Hello" GET mykey # 获取键 mykey 的值 [^2] # 增加数值 INCR mycounter # 如果 mycounter 存在,则将其值加 1;如果不存在,则初始化为 1 DECR mycounter # 如果 mycounter 存在,则将其值减 1 ``` #### 2. 列表(List)操作 ```python # 添加元素到列表 LPUSH mylist "one" # 在列表头部插入 "one" RPUSH mylist "two" # 在列表尾部插入 "two" # 获取列表元素 LRANGE mylist 0 -1 # 获取整个列表的所有元素 LPOP mylist # 移除并返回列表的第一个元素 RPOP mylist # 移除并返回列表的最后一个元素 ``` #### 3. 集合(Set)操作 ```python # 添加元素到集合 SADD myset "apple" # 将 "apple" 添加到集合 myset 中 SADD myset "banana" # 将 "banana" 添加到集合 myset 中 # 获取集合成员 SMEMBERS myset # 返回集合 myset 的所有成员 # 求差集 SDIFF dstkey key1 key2 ... keyN # 计算多个集合的差集,并将结果存储到 dstkey 中 [^3] ``` #### 4. 哈希(Hash)操作 ```python # 设置哈希字段 HSET user:1000 name "Alice" # 设置哈希 user:1000 的字段 name 为 "Alice" HSET user:1000 age 25 # 设置哈希 user:1000 的字段 age 为 25 # 获取哈希字段 HGET user:1000 name # 获取哈希 user:1000 的字段 name HGETALL user:1000 # 获取哈希 user:1000 的所有字段和值 ``` #### 5. 发布与订阅(Pub/Sub) ```python # 订阅频道 SUBSCRIBE redisChat # 订阅名为 redisChat 的频道 # 发布消息 PUBLISH redisChat "Redis is a great caching technique" # 向 redisChat 频道发布消息 [^2] ``` #### 6. Sentinel 相关命令 ```bash # 注册主服务器实例 sentinel monitor mymaster 127.0.0.1 6379 2 # 注册一个名为 mymaster 的主服务器,需要至少 2 个哨兵确认下线 [^4] # 查看 Sentinel 状态 SENTINEL masters # 查看所有被监控的主服务器状态 SENTINEL slaves mymaster # 查看主服务器 mymaster 的从服务器状态 ``` #### 7. 其他常用命令 ```python # 键管理 EXISTS mykey # 检查键是否存在 DEL mykey # 删除键 KEYS * # 查找所有匹配的键 # 过期时间 TTL mykey # 获取键的剩余生存时间 EXPIRE mykey 60 # 设置键在 60 秒后过期 ``` ### 注意事项 - 在高并发场景中,可以结合线程池和 Redis 连接池来优化资源利用效率[^1]。 - 使用 `PUBLISH` 和 `SUBSCRIBE` 实现消息发布与订阅时,确保频道名称一致以正常通信[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值