Redis命令总结(常用)

Redis字符串

Redis Mget 命令

Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

语法

redis Mget 命令基本语法如下:

redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN

可用版本

>= 1.0.0

返回值

一个包含所有给定 key 的值的列表。

实例

redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)

代码如下:

@Autowired
private RedisClusterCmds<String, String> redisClusterCmds;

/**
 * 批量获取key对应的value值
 * cacheKeys:key值集合
 * cacheData:返回值,当对应的key值不存在时,value为""或null
 */
String[] cacheKeys = new String[]{"key1,key2"};
List<KeyValue<String, String>> cacheData = redisClusterCmds.mget(cacheKeys);
if(CollectionUtils.isNotEmpty(cacheData)) {
    cacheData.stream().forEach(e -> {
        String val = e.getValueOrElse("");
        String key = e.getKey();
    });
}

Redis Mset 命令

Redis Mset 命令用于同时设置一个或多个 key-value 对。

语法

redis Mset 命令基本语法如下:

redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN 

可用版本

>= 1.0.1

返回值

总是返回 OK 。

实例

redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
1) "World"

代码如下:

Map<String, String> cacheMap = new HashMap<>();
cacheMap.put("key1","value1");
cacheMap.put("key2","value2");
/**
* mset:批量设置key-value,等同于多次执行set语句。
* 此次使用pipeline来操作redis
*/
redisClusterCmds.pipeline4List(command -> {
    log.info("set cache:{},{}", cacheMap, redisClusterCmds.mset(cacheMap));
    for (String key : cacheMap.keySet()) {
        try {
            command.expire(key, EXPIRE_SEC);
        } catch (Exception e) {
            log.error("设置redis缓存失效时间异常err,key:{}", key, e);
        }
    }
    return new ArrayList<>();
});

Redis Incr 命令

Redis Incr 命令将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

语法

redis Incr 命令基本语法如下:

redis 127.0.0.1:6379> INCR KEY_NAME 

可用版本

>= 1.0.0

返回值

执行 INCR 命令之后 key 的值。

实例

redis> SET page_view 20
OK

redis> INCR page_view
(integer) 21

redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
"21"

Redis Incrby 命令

Redis Incrby 命令将 key 中储存的数字加上指定的增量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

语法

redis Incrby 命令基本语法如下:

redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT

可用版本

>= 1.0.0

返回值

加上指定的增量值之后, key 的值。

实例

# key 存在且是数字值

redis> SET rank 50
OK

redis> INCRBY rank 20
(integer) 70

redis> GET rank
"70"


# key 不存在时

redis> EXISTS counter
(integer) 0

redis> INCRBY counter 30
(integer) 30

redis> GET counter
"30"


# key 不是数字值时

redis> SET book "long long ago..."
OK

redis> INCRBY book 200
(error) ERR value is not an integer or out of range

Redis哈希

Redis Hmget 命令

Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。

如果指定的字段不存在于哈希表,那么返回一个 nil 值。

语法

redis Hmget 命令基本语法如下:

redis 127.0.0.1:6379> HMGET KEY_NAME FIELD1...FIELDN 

可用版本

>= 2.0.0

返回值

一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

实例

redis 127.0.0.1:6379> HSET myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSET myhash field2 "bar"
(integer) 1
redis 127.0.0.1:6379> HMGET myhash field1 field2 nofield
1) "foo"
2) "bar"
3) (nil)

代码如下:

public void test() {
    // hmget命令:获取所有键值对
    String redisKey = VIP_WHILTE_USE;
    List<KeyValue<String, String>> valuesAll = vipDataSzMaster.hmget(redisKey);
    for (KeyValue<String, String> keyValue : valuesAll) {
        String value = keyValue.getValue();
        String key = keyValue.getKey();
    }
    // hmget命令:获取指定键值对
    List<KeyValue<String, String>> values = vipDataSzMaster.hmget(redisKey,"key1","key2");
    for (KeyValue<String, String> keyValue : valuesAll) {
        String value = keyValue.getValue();
        String key = keyValue.getKey();
    }
    // hget命令:获取单个key的value值
    String value1 = vipDataSzMaster.hget(redisKey, "key1");
}

Redis Hmset 命令

Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。

此命令会覆盖哈希表中已存在的字段。

如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

语法

redis Hmset 命令基本语法如下:

redis 127.0.0.1:6379> HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN  

可用版本

>= 2.0.0

返回值

如果命令执行成功,返回 OK 。

实例

redis 127.0.0.1:6379> HMSET myhash field1 "Hello" field2 "World"
OK
redis 127.0.0.1:6379> HGET myhash field1
"Hello"
redis 127.0.0.1:6379> HGET myhash field2
"World"

代码如下:

public void test() {
    // hmset命令:设置所有键值对
    String redisKey = VIP_WHILTE_USE;
    Map<String,String> hashMap = new HashMap<>();
    hashMap.put("key1","value1");
    hashMap.put("key2","value2");
    String ok = vipDataSzMaster.hmset(redisKey, hashMap);
    
    // hget命令:设置指定key的value值
    Boolean flag = vipDataSzMaster.hset(redisKey, "key1", "value1");
}

Redis有序集合

Redis Zscan 命令

Redis Zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)

语法

redis Zscan 命令基本语法如下:

redis 127.0.0.1:6379> ZSCAN key cursor [MATCH pattern] [COUNT count]
  • cursor - 游标。
  • pattern - 匹配的模式。
  • count - 指定从数据集里返回多少元素,默认值为 10 。

可用版本

>= 2.8.0

返回值

返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。

实例

> ZADD site 1 "Google" 2 "Runoob" 3 "Taobao" 4 "Weibo"
(integer) 4
> ZSCAN site 0 match "R*"
1) "0"
2) 1) "Runoob"
2) 2.0

代码如下:

public void test() {
    // 设置游标
    String cursor = "0";
    ScanCursor scanCursor = new ScanCursor();
    scanCursor.setCursor(cursor);
    // 设置查询范围(每次查询100条数据)
    ScanArgs scanArgs = new ScanArgs();
    scanArgs.limit(100);
    scanArgs.match("*");
    while (true){
        ScoredValueScanCursor<String> zscan = vipRankSlavePoolRedisCommands.zscan(key,scanCursor,scanArgs);
        for (ScoredValue<String> valueScored : zscan.getValues()) {
            String value = valueScored.getValue();
            double score = valueScored.getScore();
            // todo 业务操作
        }
        cursor = zscan.getCursor();
        if ("0".equals(cursor) || CollectionUtils.isEmpty(zscan.getValues())) {
            break;
        }
    }
}

Redis Zadd 命令

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

分数值可以是整数值或双精度浮点数。

如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。

注意: 在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素。

语法

redis Zadd 命令基本语法如下:

redis 127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

可用版本

>= 1.2.0

返回值

被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

实例

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 1 "uno"
(integer) 1
redis> ZADD myzset 2 "two" 3 "three"
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
redis> 

具体请查看redis官网内容:https://www.runoob.com/redis/redis-strings.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值