List是单键多值,字符串列表,按照插入顺序可以将一个元素插入列表的头部或者尾部。
底层是双向链表
- lpush/rpush <key><value1><value2><value3> 从左侧或右侧插入数据
- lpop/rpop <key> 从左侧或右侧吐出一个值(值在键在,值亡键亡)
- rpoplpush <key1><key2> 从key1的右侧吐值,放到key2的左边
- lrange <key><起始位置><结束位置> 范围内取值(若设置范围0 -1 取出所有值)
- lindex <key><value> 按照索引下标获取元素(从左到右)
- llen <key> 获取列表长度
-
- linsert <key> before/after <value> <newvalue> 在某个key的某个值前面或者后面插入新值
- lrem <key><n><value> 从左边删除n个value
- lset <key><index><value> 将列表key下标为index的值替换为value
-
List的数据结构是快速链表(quick list)
在列表元素较少时,使用连续的一块内存,此时结构是压缩列表(ziplist),当数据量较多时,将多个压缩列表进行链接,才会转为quick list。
Redis将多个ziplist使用双向指针进行串联。从而具有快速的插入删除功能,不会有太大的空间荣誉。
Redis中set的特性是具有自动排重。
set是string类型中的无序集合。
底层是value为null的hash表。
添加、删除、查找的复杂度是O(1)
- sadd <key><value1><value2> 往key中添加元素
- smembers <key> 取所有值
- sismember <key> <value> 判断某个set中是否存在某个值
- scard <key> 返回集合元素个数
- srem <key><value1><value2>... 删除集合中某个元素
- spop <key> 随机吐出一个值
- srandmember <key><n> 随机从集合取n个值(不删除)
-
- smove <source><destination><value> 将集合中的一个值从一个集合移动到另一个集合
- sinter <key1><key2> 返回两个集合交集
- sunion <key1><key2> 返回两个集合并集
- sdiff <key1><key2> 返回两个元素差集(key1有 key2无)
set的数据结构是dict字典
字典基于哈希表实现。内部是hash结构,所有value指向同一个位置。
Redis Hash 是一个键值对集合。
Redis Hash 是一个string类型的field和value映射表,用于存储对象。
- hset <key><field><value> 给key集合中的<field>键赋值为value
- hget <key1><field> 取值
- hmset
- hexists <key><field> 查看是否存在某个值是否存在,0标识不存在,1标识存在
- hkeys <key> 查看所有的field
- hvals <key> 查看所有的value
- hincrby <key><field><步长>
- hsetnx <key><field><value> 将哈希表中的field设置为value(只能不存在该字段时才可以)
-
注意:
当Hash类型长度短时,采用压缩列表Ziplist,当长度长的时候,采用hashtable哈希表
Zset与set显示,没有重复元素!
同时有序,每个成员有score,利用评分进行排序。
- Zadd <key><score1><value1><score2><value2>... 将一个或者多个值元素加入有序表的key中
- zrange <key><> 0 -1 withscores 查看<start>到<stop>之间的元素
- zrangebyscore <key> <start> <value> 【withscores】 查看某个范围的结果集
- zrevrangebyscore <key> <start> <value> 按照从大到小的排列
- zincrby <key><incremente><member> 让某个值进行增加
- zrem <key><value> 删除某个元素
- zcount <key><min><max> 统计分数区间内的元素个数
- zrank<key> <value> 返回该值在集合中的排名
案例:
利用zset实现一个文章访问量的排行榜?
底层的数据结构是利用了两种:
1、Hash,hash的作用是关联元素value与score。
2、跳跃表:给元素value进行排序。
跳跃表