Jade Dungeon

redis数据结构

基础数据结构

字符串

SET    [keyname] [value]  # 设置键值[keyname]的值是[value]
KEYS *                    # 获取所有的键值
GET    [keyname]          # 获取[keyname]的值
EXISTS [keyname]          # 判断是否存在键值[keyname]
DEL    [keyname]          # 删除键值[keyname]
TYPE   [keyname]          # 判断[keyname]的类型(string字符串,hash哈希表,list列表,set集合,zset有序集合)

哈希表

HSET    [keyname] [key] [value]    # 添加一个哈希属性和值
HGET    [keyname] [key]            # 获取值
HKEYS   [keyname]                  # 获取全部的key值
HVALS   [keyname]                  # 获取全部的[value]值
HGETALL [keyname]                  # 获取所有的值

列表

通过双向链表实现,头尾操作均为\(O(1)\),获取指定元素比较慢。

LPUSH  [keyname] [value1]            # 或者 在左边插入
# 或者
LPUSH  [keyname] [value1] [value2]

RPUSH  [keyname] [value2]            # 在右边插入
LRANGE [keyname] 0 -1                # 查询所有的元素`0`表示第一个`-1`表示最后一个
LPOP   [keyname]
RPOP   [keyname]

集合

元素唯一,但是没有顺序。使用值为空的哈希表实现,操作都是\(O(1)\)。

SADD     [keyname] [value1] [value2]      # 添加元素 [value1] [value2] 
SREM     [keyname] [value1]               # 删除元素 [value1]
SMEMBERS [keyname]                        # 查询所有元素

有序集合

使用哈希和跳跃表实现,中间速度也很快。

ZADD   [keyname] [key] [value]            # 添加
ZRANGE [keyname] [key-start] [key-end]    # 获取指定范围的元素

与列表的比较:

  • 相同:
    • 都是有序的
    • 都可以获取某一范围的元素
  • 不同:
    • 列表通过双向链表实现,两端数据存取极快,中间缓慢
    • 有序集合通过哈希和跳跃表实现,中间速度也很快,为\(O(log(N))\)
    • 列表不能简单地调整某个元素的位置,有序集合可以
    • 有序集合比列表更好费内存