Hash
本质上就是一个HashMap,也就是嵌套了一个HashMap,相当于
Map<String, Map<String, String>> hash = new HashMap<>();
适合存储类这样的数据,由于值本身又是一个Map,因此可以在此Map中放入类的各种属性和值,以实现一个Hash数据类型存储一个类的数据
添加一个hash类型的数据
hset <key> [<字段> <值>]...
hset fruit name apple size big color red
获取数据
hget <key> <字段>
hgetall <key> -- 如果想要一次性获取所有的字段和值hvals <key> -- 获取所有的值
判断某个字段是否存在
hexists <key> <字段>
删除字段
hdel <key>
统计键值对的数量
hlen <key>
注意:Hash中只能存放字符串值,不允许出现嵌套的的情况
List
它就是一个列表,在列表中存放一系列的字符串,它支持随机访问,支持双端操作,就像Java中的LinkedList
直接向一个已存在或是不存在的List中添加数据,如果不存在,会自动创建
-- 向列表头部添加元素
lpush <key> <element>...
-- 向列表尾部添加元素
rpush <key> <element>...
-- 在指定元素前面/后面插入元素
linsert <key> before/after <指定元素> <element>
获取元素:下标可以使用负数来表示从后到前数的数字,像python
-- 根据下标获取元素
lindex <key> <下标>
-- 获取并移除头部元素
lpop <key>
-- 获取并移除尾部元素
rpop <key>
-- 获取指定范围内的
lrange <key> start stop-- 获取列表a中的全部元素
lrange a 0 -1
支持阻塞操作,类似于生产者和消费者,比如想要等待列表中有了数据后再进行pop操作
-- 如果列表中没有元素,那么就等待,如果指定时间(秒)内被添加了数据,那么就执行pop操作,如果超时就作废,支持同时等待多个列表,只要其中一个列表有元素了,那么就能执行
blpop <key>... timeout
Set和SortedSet
它不允许出现重复元素,不支持随机访问,但是能够利用Hash表提供极高的查找效率
向Set中添加一个或多个值:
sadd <key> <value>...
查看Set集合中有多少个值:
scard <key>
判断集合中是否包含:
-- 是否包含指定值 sismember <key> <value> -- 列出所有值 smembers <key>
集合之间的运算:
-- 集合之间的差集 sdiff <key1> <key2> -- 集合之间的交集 sinter <key1> <key2> -- 求并集 sunion <key1> <key2> -- 将集合之间的差集存到目标集合中 sdiffstore 目标 <key1> <key2> -- 同上 sinterstore 目标 <key1> <key2> -- 同上 sunionstore 目标 <key1> <key2>
移动指定值到另一个集合中:
smove <key> 目标 value
移除操作:
-- 随机移除一个幸运儿 spop <key> -- 移除指定 srem <key> <value>...
那么如果要求Set集合中的数据按照指定的顺序进行排列,这时就可以使用SortedSet,它支持为每个值设定一个分数,分数的大小决定了值的位置
可以添加一个带分数的值:
zadd <key> [<score> <value>]...
同样的:
-- 查询有多少个值 zcard <key> -- 移除 zrem <key> <value>... -- 获取区间内的所有 zrange <key> start stop
由于所有的值都有一个分数,我们也可以根据分数段来获取:
-- 通过分数段查看 zrangebyscore <key> start stop [withscores] [limit] -- 统计分数段内的数量 zcount <key> start stop -- 根据分数获取指定值的排名 zrank <key> <value>