Hash、List 最基本的结构化数据类型
散列(Hash)
散列,是种“键 + 字段 + 字段值”的数据结构。实际应用上,可以用它将一个“大块”的内容,分割为一个个的“小块”内容,进而提高效率和性能,减少运行时的资源浪费
所有散列命名均以 “H” 开头
1 2 3 4 5 6 7
| // 设定散列的 key + field + value
// 注意:field_value 只能是字符串,当然不支持类型嵌套 HSET key_name field_name field_value
// 获取散列的 key with field HGET key_name field_name
|
1 2 3 4 5
| // 批量设定 HMSET key_name field_name1 field_value1 field_name2 field_value2 ...
// 批量获取 HMGET key_name field_name1 field_name2 ...
|
1 2
| // 获取 key_name 下的全部 fields 和 values HGETALL key_name
|
1 2
| // 存在返回 1,否则返回 0(包括键不存在或字段不存在) HEXISTS key_name field_name
|
1 2
| HSETNX key_name field_name field_value
|
1 2
| HINCRBY key_name field_name 每次递增的数值
|
1
| HDEL key_name field_name1 field_name2 ...
|
1 2 3 4 5
| HKEYS key_name
HVALS key_name
|
列表
存储一个有序字符串列表,为双向链表,越接近两端的元素读取速度越快。实际应用上,可以用来表示“最新的XXX”、“新鲜事”、“日志”等场景,以突出列表的链表优势
1 2 3 4 5 6 7
|
LPUSH key_name value [value ...]
RPUSH key_name value [value ...]
|
注意:多个 values 时,则顺次添加,且可以有相同 value 值
弹出元素
注意:“弹出”后,该元素将从列表中消失。执行步骤为:先从列表中移除元素,后返回该元素。
1 2 3 4 5
| LPOP key_name
RPOP key_name
|
可以实现栈和队列的功能:
1 2 3 4 5 6 7
| LPUSH my_strack A B C LPOP my_strack
LPUSH my_queue A B C RPOP my_queue
|
1 2
| LRANGE key_name start end
|
同时,也支持负索引,表示从右侧开始计算序列。 -1 代表最右侧元素,-2 代表最右侧倒数第二个元素
注意:
1. 如果 start 大于 end,则返回空列表:(empty list or set)
2. 如果 end 大于实际值,则返回至最右侧元素
3. 无 `RRANGE` 命令
1 2
| LREM key_name count value
|
这样就可以将 list 当做数组来使用
1 2
| LSET key_name index value
|
1 2
| LTRIM key_name start end
|
可以用来实现日志的管理,例如“动态日志”,只保留100条最新的动态日志记录,就可以:
1 2
| LPUSH logs value LTRIM logs 0 100
|
1 2
| LINSERT key_name BEFORE|AFTER find_value set_value
|
1 2
| RPOPLPUSH from_key_name to_key_name
|
总结

转