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))\)
- 列表不能简单地调整某个元素的位置,有序集合可以
- 有序集合比列表更好费内存