欢迎来访我的博客。

Redis学习笔记2:数据结构和API

数据库 小张哥哥 530浏览 4评论

在本篇文章中,总结一下redis内的各种数据结构和各种数据结构常用的API。

Redis的通用命令

几个常用的通用命令
keys

keys *  遍历所有的key
keys [pattern] 遍历符合pattern的所有key, 比如keys a*

一般不在生产环境中使用。因为数据量很大,阻塞。

dbsize 算出key的总数

exists key 判断key是否存在。存在返回1, 不存在返回0

del key 删除指定的key-value

expire key seconds
key在seconds秒后过期

ttl key
查看key剩余的过期时间
返回时间seconds, -2表示已过期
-1 表示没有过期时间,一直有效

persist key
去掉key的过期时间

type key
返回key的类型。

命令的时间复杂度。
keys命令是O(n),其它几个命令都是O(1)

数据结构和内部编码

数据结构:
stringhashlistsetsorted set

编码方式:
rawintziplistlinkedlisthashmapintset

字符串

key value

使用场景:
缓存
计数器
分布式锁

API

get
set
del

incr
decr
incrby
decrby

set key value
可以是否存在,都设置
setnx key value
key不存在才设置
set key value xx
key存在,才设置

mget key1 key2 key3 ...
批量获取,原子操作

getset key newvalue
设置key值为newvalue,并返回旧的value

append key value
将value最佳到旧的value

strlen str
返回字符串的长度

incrbyfloat key
增加key对应的值,浮点数

getrange key start end
获取字符串指定下班的所有值
setrange
设置指定下标所有的值


哈希

键值结构

key field:value


API

hget key field
hset key field value
hdel key field

例如


hset user:1:info age 23
hget user:1:info age"23"hset user:1:info name Tom(integer)1
hgetall user:1:info
1) "age"2) "23"3) "name"4) "Tom"hdel user:1:info age(integer)1

hexists key field
判断hash key是否有field

hlen key
判断hash key field的个数

hmget key field1 field2 field3 ... fieldN
批量获取hash key的一批field对应的值

hmset key field1 value1 field2 value2 ... fieldN valueN
批量设置hash key的一批field value

hgetall key
返回hash key对应所有的field和value
hvals key
返回hash key对应多有的field的value
hkeys key
返回hash key对应所有的field

hsetnx key field value
设置hash key对应field的value的值,如果该值已存在,则设置失败。
hincrby key field inCounter
hash key对应的field的value自增intCounter
hincrbyfloat key field floatCounter
hincryby的浮点数版


列表

key elements
user:1:message a-b-c-d-e-f

特点:

  1. 有序

  2. 可以重复

  3. 可以分别从左边或者右边添加或者弹出


API

rpush key value1 value2 ... valueN
从列表的右端插入值

lpush key value1 value2 ... valueN
从列表的左端插入值

linsert key before|after value newValue
在list指定的值前|后插入newValue

lpop key
从列表的左边弹出一个元素

rpop key
从列表的右侧弹出一个元素

lrem key count value
根据count值,从列表中删除所有value相等的项。
count>0, 从左到右,删除最多count个value相等的项
count<0,从有到左,删除最多-count个value相等的项
count=0, 删除所有value相等的项

ltrim key start end
按照索引范围修剪列表(包括start end两个边界值)

lrange key start end
获取列表指定索引范围所有item(包括start和end两个边界值)

lindex key index
获取列表中指定索引的item

llen key
获取列表的长度

lset key index newValue
设置列表指定索引值为newValue

blpop key timeout
lpop阻塞版本,timeout是阻塞超时时间,timeout=0为永不阻塞

brpop key timetout
rpop的阻塞版本

实现栈: lpush + lpop
实现列表: lpush + rpop
实现固定长度列表:lpush + ltrim
实现消息队列: lpush + brpop


集合

key values
例子
user:1:follow it,music, his, sports, movie

特点:
无序
不重复
集合间操作


API

sadd key emlement
向集合中添加element, 如果已存在,则失败

srem key element
将集合中的element移除掉

scard user:1
计算集合大小

sismember user:1:follow it
判断元素是否在集合中

srandmamber user:1follow
从集合中随机挑count个元素

smembers user:1:follow
从集合中随机弹出一个元素

smembers user:1:follow
获取集合中所有元素

srandmember
不会破坏集合

spop
从集合中弹出元素

集合间的操作
sdiff sinter sunion

sdiff user:1:follow user:2:follow 差集
sinter user:1:follow user:2:follow 交集
sunion user:1:follow user:2:follow 并集

sdiff|sinter|sunion + store destkey
将差集,交集,并集的结果保存在destkey中。
因为上述计算时间复杂度比较高,保存结果可以减少查询


有序集合

key score + value


API

zadd key score element
添加score和element

zadd key element
删除元素

zscore key element
返回元素的分数

zincrby key increScore element
增加或减少元素的分数

zcard key
返回元素的总个数

zrank key element
返回其中某个元素的排名

zrange key start end [withscores]
返回指定索引范围内的升序元素[是否打印分值]

zrangebyscore key minScore maxScore [withscores] 返回指定分数范围内的升序元素[是否打印分值]

zcount key minScore maxScore
返回有序集合内指定分数范围直接的元素数目

zremrangebyrank key start end
删除指定排名内的升序元素

zremrangebyscore key minScore maxScore
删除指定分数内的升序元素

zrevrank 从高到底排名
zrevrange 从高到低取范围
zrevrangebyscore 依分值从高到低取范围
zinterstore 取交集存储
zunion 取并集


转载请注明:禅思 » Redis学习笔记2:数据结构和API?

喜欢 (0) or 分享 (0)

我的个人微信公众号,欢迎关注

扫码或搜索:Python后端开发Django

Python后端开发Django

微信公众号 扫一扫关注

结交朋友、一起学习,一起进步。

科波之主

QQ号 386046154 立即加入

添加微信,进行技术交流

专注技术交流, 一同成长进步

我的微信号

如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)个小伙伴在吐槽
    1. how much is amoxicillin purchase amoxicillin online - amoxicillin 500mg pill
      Claytontulky 2021-06-21 00:59:16 回复
      • where can i get doxycycline doxycycline - order doxycycline online
        Claytontulky 2021-06-21 22:27:06 回复
        • amoxicillin 875 125 mg tab purchase amoxicillin online - buy amoxicillin online cheap
          Claytontulky 2021-06-22 19:49:07 回复
          • mexican viagra - viagra mexican viagra
            Charlesbuift 2021-06-23 18:02:05 回复