redis工具类

2020-04-05  本文已影响0人  溅十三
packagecom.imooc.utils;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.dao.DataAccessException;

importorg.springframework.data.redis.connection.RedisClusterConnection;

importorg.springframework.data.redis.connection.RedisConnection;

importorg.springframework.data.redis.connection.StringRedisConnection;

importorg.springframework.data.redis.core.RedisCallback;

importorg.springframework.data.redis.core.RedisOperations;

importorg.springframework.data.redis.core.SessionCallback;

importorg.springframework.data.redis.core.StringRedisTemplate;

importorg.springframework.stereotype.Component;

importjava.util.List;

importjava.util.Map;

importjava.util.Set;

importjava.util.concurrent.TimeUnit;

/**

*@Title: Redis 工具类

*@author慕课网

*/

@Component

publicclassRedisOperator{

//  @Autowired

//    private RedisTemplate<String, Object> redisTemplate;

@Autowired

privateStringRedisTemplate redisTemplate;

// Key(键),简单的key-value操作

/**

* 实现命令:TTL key,以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。

*

*@paramkey

*@return

*/

publiclongttl(String key){

returnredisTemplate.getExpire(key);

}

/**

* 实现命令:expire 设置过期时间,单位秒

*

*@paramkey

*@return

*/

publicvoidexpire(String key,longtimeout){

redisTemplate.expire(key, timeout, TimeUnit.SECONDS);

}

/**

* 实现命令:INCR key,增加key一次

*

*@paramkey

*@return

*/

publiclongincr(String key,longdelta){

returnredisTemplate.opsForValue().increment(key, delta);

}

/**

* 实现命令:KEYS pattern,查找所有符合给定模式 pattern的 key

*/

publicSetkeys(String pattern){

returnredisTemplate.keys(pattern);

}

/**

* 实现命令:DEL key,删除一个key

*

*@paramkey

*/

publicvoiddel(String key){

redisTemplate.delete(key);

}

// String(字符串)

/**

* 实现命令:SET key value,设置一个key-value(将字符串值 value关联到 key)

*

*@paramkey

*@paramvalue

*/

publicvoidset(String key, String value){

redisTemplate.opsForValue().set(key, value);

}

/**

* 实现命令:SET key value EX seconds,设置key-value和超时时间(秒)

*

*@paramkey

*@paramvalue

*@paramtimeout

*            (以秒为单位)

*/

publicvoidset(String key, String value,longtimeout){

redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);

}

/**

* 实现命令:GET key,返回 key所关联的字符串值。

*

*@paramkey

*@returnvalue

*/

publicStringget(String key){

return(String)redisTemplate.opsForValue().get(key);

}

/**

* 批量查询,对应mget

*@paramkeys

*@return

*/

publicListmget(List<String> keys){

returnredisTemplate.opsForValue().multiGet(keys);

}

/**

* 批量查询,管道pipeline

*@paramkeys

*@return

*/

publicListbatchGet(List<String> keys){

//  nginx -> keepalive

//  redis -> pipeline

List result = redisTemplate.executePipelined(newRedisCallback() {

@Override

publicStringdoInRedis(RedisConnection connection)throwsDataAccessException{

StringRedisConnection src = (StringRedisConnection)connection;

for(String k : keys) {

src.get(k);

}

returnnull;

}

});

returnresult;

}

// Hash(哈希表)

/**

* 实现命令:HSET key field value,将哈希表 key中的域 field的值设为 value

*

*@paramkey

*@paramfield

*@paramvalue

*/

publicvoidhset(String key, String field, Object value){

redisTemplate.opsForHash().put(key, field, value);

}

/**

* 实现命令:HGET key field,返回哈希表 key中给定域 field的值

*

*@paramkey

*@paramfield

*@return

*/

publicStringhget(String key, String field){

return(String) redisTemplate.opsForHash().get(key, field);

}

/**

* 实现命令:HDEL key field [field ...],删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

*

*@paramkey

*@paramfields

*/

publicvoidhdel(String key, Object... fields){

redisTemplate.opsForHash().delete(key, fields);

}

/**

* 实现命令:HGETALL key,返回哈希表 key中,所有的域和值。

*

*@paramkey

*@return

*/

publicMaphgetall(String key){

returnredisTemplate.opsForHash().entries(key);

}

// List(列表)

/**

* 实现命令:LPUSH key value,将一个值 value插入到列表 key的表头

*

*@paramkey

*@paramvalue

*@return执行 LPUSH命令后,列表的长度。

*/

publiclonglpush(String key, String value){

returnredisTemplate.opsForList().leftPush(key, value);

}

/**

* 实现命令:LPOP key,移除并返回列表 key的头元素。

*

*@paramkey

*@return列表key的头元素。

*/

publicStringlpop(String key){

return(String)redisTemplate.opsForList().leftPop(key);

}

/**

* 实现命令:RPUSH key value,将一个值 value插入到列表 key的表尾(最右边)。

*

*@paramkey

*@paramvalue

*@return执行 LPUSH命令后,列表的长度。

*/

publiclongrpush(String key, String value){

returnredisTemplate.opsForList().rightPush(key, value);

}

}
上一篇下一篇

猜你喜欢

热点阅读