一. 目录
1. 字符串
2. 哈希
3. 链表
4. 集合
5. 有序集合
6. 基数
1.字符串
命令 | 说明 |
---|---|
set key value | 设置键值对 |
get key | 通过键获取值 |
del key | 通过key,删除键值对 |
strlen key | 求key指向字符串的长度 |
getset key value | 修改原来key的对应值,并将旧值返回 |
getrange key start end | 获取子串 |
append key value | 将新的字符串value,加入到原来key指向的字符串末 |
2.哈希
在redis中,hash是一个String类型得field和valued的映射表
例子
角色有3个字段:编号(id)、角色名称(roleName)和备注(note)
角色hash结构
命令 | 说明 |
---|---|
hdel key field1 [field2…] | 删除hash结构的某个(些)字段 |
hexists key field | 判断hash结构是否存在field字段 |
hgetall key | 获取所有hash结构中的键值 |
hincrby key field increment | 指定给hash结构中的某一字段加上一个整数(要求存储的是整数型字符串) |
hincrbyfloat key field increment | 指定给hash结构中的某一字段加上一个浮点数 |
hkeys key | 返回hash中所有的键 |
hlen key | 返回hash键值对的数量 |
hmget key field1[field2] | 返回hash中指定的键的值,可以是多个 |
hmset key field1 value1 [field2 value2] | hash结构中设置多个键值对 |
hset key field value | 在hash结构中设置键值对 |
hsetnx key field value | 在hash结构中不存在对应的键,才设置值 |
hvals key | 获取hash结构中所有的值 |
注意: 如果哈希结构是个很大的键值对, hkeys、hgetall、hvals等返回所有哈希结构数据的命令,会造成大量数据的读取,要考虑性能和读取数据大小对JVM内存的影响
3.链表(linked-list)
优势:插入和删除的遍历,因为链表节点是分配在不同的内存区域的,并不连续,只是根据上一个节点保存下一个节点的顺序来索引而已,无需移动元素。
命令 | 说明 |
---|---|
lpush key node1 [node2]… | 把节点node1加入到链表最左边 |
rpush key node1 [node2]… | 把节点node1加入到链表的最右边 |
lindex key index | 读取下标为index的节点 |
llen key | 求链表的长度 |
lpop key | 删除左边第一个节点,并将其返回 |
rpop key | 删除右边第一个节点,并将其返回 |
linsert key before或after pivot node | 插入一个节点node,并且可以指定在值为pivot的节点的前面(before)或者后面(after) |
lpushx list node | 如果存在key为list的链表,则插入节点node |
rpushx list node | 如果存在key为list的链表,则插入节点node |
lrange list start end | 获取链表list从start下标到end下标的节点值 |
lrem list count value | 如果count为0,则删除所有值为value的节点;如果count不是0,则先对count取绝对值,删除不大于绝对值个等于value节点 |
lset key index node | 设置列表下标为index的节点的值为node |
ltrim key start stop | 修剪链表,只保留从start到stop的区间的节点,其余的都删除掉 |
4.集合
Redis的集合不是一个线性结构,而是一个哈希表结构
插入、删除和查找的时间复杂度都是O(1),注意一下三点:
- 集合中的每一个元素都是不能重复的,当插入相同记录的时候都会失败
- 集合是无序的
- 集合的每一个元素都是String数据结构类型
命令 | 说明 |
---|---|
sadd key member1[member2 member3 …] | 给键为key的集合增加成员 |
scard key | 统计键为key的集合成员数 |
sdiff key1 [key2] | 找出两个集合的差集 |
sdiffstore des key1 [key2] | 先找出key1和key2的差集,然后保存在des集合中 |
sinter key1 [key2] | 求key1和key2两个集合的交集 |
sinterstore des key1 key2 | 先按sinter命令的规则,找出key1和key2两个集合的交集,然后保存到des中 |
sismember key member | 判断member是否键为key的集合的成员 |
smembers key | 返回集合所有成员 |
smove src des member | 将成员member从集合src迁移到集合des中 |
spop key | 随机弹出集合的一个元素 |
srandmember key [count] | 随机返回集合中一个或者多个元素,count为限制返回总数 |
srem key member1 [member2…] | 移除集合中的元素,可以是多个元素 |
sunion key1 [key2] | 求两个集合的并集 |
sunionstore des key1 key2 | 先求key1和key2并集后保存到des集合中 |
5.有序集合
有序集合是依赖key标识它是属于哪个集合,依赖分数进行排序,所以值和分数是必须的。
命令 | 说明 |
---|---|
zadd key score1 value1 [score2 value2 …] | 向有序集合的key,增加一个或者多个成员 |
zcard key | 获取有序集合的成员数 |
zcount key min max | 根据分数返回对应的成员列表 |
zincrby key increment member | 给有序集合成员值为member的分数增加increment |
zinterstore desKey numkeys key1 [key2 key3…] | 求多个有序集合的交集,并且将结果保留到desKey中 |
zlencount key min max | 求有序集合key成员值在min和max的范围 |
zrange key start stop [withscores] | 按照分数的大小(从小到大)返回成员 |
zrank key member | 按从小到大有序集合的排行 |
zrangebylex key min max[limit offset count] | 根据值的大小,从小到大排序 |
zrangebyscore key min max [withscores] [limit offset count ] | 根据分数大小,从小到大求取值范围 |
zremrangebyscore key start stop | 根据分数区间进行删除 |
zremrangebyrank key start stop | 根据分数排行从小到大的排序删除,从0开始计算 |
zremrangebylex key min max | 按照值的分布进行删除 |
zrevrange key start stop [withscores] | 从大到小的按分数排序(按下标) |
zrevrangebyscore key max min [withscores] | 从大到小的按分许排序(按分数) |
zrevrank key member | 按从大到小的顺序,求元素的排行 |
zscore key member | 返回成员的分数值 |
6.基数 -- HyperLogLog
基数是一种算法,并不存储元素
命令 | 说明 |
---|---|
pfadd key element | 添加指定元素到HyperLogLog中 |
pfcount key | 返回HyperLogLog的基数值 |
pfmerge desKey key1[key2 key3…] | 合并多个HyperLogLog,并将其保存在desKey |