Featured image of post redis基本操作

redis基本操作

redis

基本操作

当使用Redis时,我们通常会涉及到五种不同的数据类型,分别是字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)以及有序集合(Sorted Sets)。下面将分别介绍它们的增删改查操作以及对应的redis-cli命令。

字符串(Strings)

字符串是Redis支持最基本的一种数据类型。在Redis中,字符串类型的值可以是任何一个二进制安全(binary safe)的字符串,包括另外一个字符串。

  • 新增: SET key value
  • 删除: DEL key
  • 查询: GET key
  • 修改: SET key new_value

例如:

1
2
3
4
5
6
7
8
> SET name John   #新增键名为name,值为John的字符串
OK
> GET name        #查询name对应的值
"John"
> SET name Tom    #修改name对应的值为Tom
OK
> DEL name        #删除name对应的键值对
(integer) 1

哈希(Hashes)

哈希是一个键值对集合。在Redis中,相当于一个表格,其中每个键都映射到一个值。

  • 新增: HSET key field value
  • 删除: HDEL key field 删除哈希表键 key 中的一个或多个指定字段,不存在的字段将被忽略
  • 查询:
    • HGET key field 返回哈希表 key 中给定域 field 的值
    • HGETALL key 返回哈希表 key 中,所有的域和值
  • 修改: HSET key field new_value

例如:

1
2
3
4
5
6
7
8
> HSET myhash field1 Hello   #新增键名为myhash,field1:Hello的键值对
(integer) 1
> HGET myhash field1        #查询myhash中field1对应的值
"Hello"
> HSET myhash field1 World  #修改myhash中field1对应的值为World
(integer) 0
> HDEL myhash field1        #删除myhash中的field1键值对
(integer) 1

列表(Lists)

列表就是链表,Redis列表是一个双向链表,它可以由最多 4,294,967,295个元素组成,每个元素都是一个字符串。

  • 新增:
    • LPUSH key value1 [value2] 将一个或多个值 value 插入到列表 key 的表头
    • RPUSH key value1 [value2] 将一个或多个值 value 插入到列表 key 的表尾
  • 删除: LPOP key 移除并返回列表 key 的头元素,当 key 不存在时,返回 nil
  • 查询:
    • LRANGE key start stop 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定,包含 start 和 stop 的元素
    • LLEN key 返回列表 key 的长度
  • 修改: LSET key index new_value 将列表 key 下标为 index 的元素的值设置为 new_value

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
> LPUSH mylist a b c   #新增键名为mylist,值为a、b、c的元素
(integer) 3
> LRANGE mylist 0 -1  #查询mylist中的所有元素
1) "c"
2) "b"
3) "a"
> LPOP mylist         #删除mylist表头的元素c并返回
"c"
> LLEN mylist         #查询mylist的长度
(integer) 2
> LSET mylist 0 d     #将mylist中下标为0的元素从原来的a修改成d
OK

集合(Sets)

集合是一些无序且唯一的元素的组合。在Redis中,集合的实现非常类似于列表。

  • 新增: SADD key member1 [member2] 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
  • 删除: SPOP key 随机地移除并返回集合中的一个元素,如果集合为空,返回 nil
  • 查询:
    • SMEMBERS key 返回集合 key 中的所有成员,不存在的集合 key 被视为空集合
    • SCARD key 返回集合 key 的基数 (集合中元素的数量)
  • 修改: SREM key member1 [member2] 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
> SADD myset a b c       #新增键名为myset,元素为a、b、c的集合
(integer) 3
> SMEMBERS myset         #查询myset中所有的元素
1) "b"
2) "c"
3) "a"
> SPOP myset             #从myset中随机删除一个元素并返回
"b"
> SCARD myset            #查询myset中元素的个数
(integer) 2
> SREM myset a          #将myset中的a元素移除
(integer) 1

有序集合(Sorted Sets)

有序集合跟集合一样也是字符串类型元素的集合,但是每个元素都会关联一个分数,有序集合的成员会按照分数排序。

  • 新增: ZADD key score1 member1 [score2 member2] 将一个或多个 member 元素及其 score 值加入到有序集 key 当中
  • 删除: ZREM key member1 [member2] 移除有序集 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略
  • 查询:
    • ZRANGE key start stop [WITHSCORES] 返回有序集 key 中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序来排列
    • ZCARD key 返回有序集 key 的基数
  • 修改: ZINCRBY key increment member 有序集 key 中,成员 member 的 score 值加上增量 increment

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
> ZADD myzset 10 Tom 20 John   #新增键名为myzset,元素是Tom(score:10)和John(score:20)的有序集合
(integer) 2
> ZRANGE myzset 0 -1 WITHSCORES   #查询myzset中所有元素及其分数
1) "Tom"
2) "10"
3) "John"
4) "20"
> ZINCRBY myzset 10 Tom       #将myzset中Tom对应的分数加10
"20"
> ZREM myzset John           #将myzset中John元素移除
(integer) 1

上述命令都可以在redis-cli命令行中进行操作。可以通过redis-cli命令连接到Redis服务器,并在命令行中输入相应的命令来操作Redis数据库。

获取kv数据类型

可以使用Redis命令TYPE key获取一个键对应值的数据类型。该命令将返回值的数据类型,例如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等。

例如:

1
2
3
4
redis> SET mykey "Hello World"   # 新增一个字符串类型的键值对
OK
redis> TYPE mykey               # 获取mykey键对应的值的数据类型
string