欢迎光临
感谢一路有你

Redis学习笔记(二)API

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

通用结构

  1. keys 键数
    keys * 显示出所有键数
    keys [pattern]
    keys 命令一般不再生产环境中使用
  2. dbsize 计算key的总数
    可在线上使用的
  3. exists key名 判断是否存在
    0不存在 1存在
  4. del key名 [key名...]
    0不存在 1成功
  5. expire key seconds 设置过期时间
    key在seconds秒后过期
    查询过期时间 ttl key
    去掉过期时间 persist key

    127.0.0.1:6379> set hello world
    OK
    127.0.0.1:6379> expire hello 20
    (integer) 1
    127.0.0.1:6379> ttl hello
    (integer) 15
    127.0.0.1:6379> get hello
    "world"
    127.0.0.1:6379> ttl hello
    (integer) -2//过期 -1不存在过期时间
    127.0.0.1:6379> get hello
    (nil)
  6. type key 类型

数据类型

数据结构与内部编码

单线程

类型

字符串类型string

<code>value不能大于512m,最好不超过100k

场景:
    缓存
    计数器
    分布式锁
命令:
    get 
    set
    del
    ---
    incr key    自增1,如果key不存在,为1
    decr key    自减1,如果key不存在,为-1
    incrby key k    自增k,key不存在为k
    decr key k      自减k,key不存在则为-k
    ---
    set key value  不管key是否存在,都设置
    setnx key value     key不存在,才设置
    set key value xx    key存在,才设置
    ---
    mget key1 key2                  批量获取
    mset key1 value2 key2 value 2   批量设置
    n次get=n次网络时间+n次命令时间
    1次mget = 1次网络时间+n次命令时间
    ---
    getset key newvalue    设置新的value,并返回旧的value
    append key value        将value追加到旧的value
    strlen key              返回字符串的长度(注意中文)
    ---
    incrbyfloat key 3.5     增加key对应的值3.5
    getrange key start end  获取字符串指定下标所有的值
    setrange key index value    设置指定下标所有对应的值

    ![](media/15352402763810/15352545301171.jpg)

实战
    1.浏览量:  
        incr userid:pageview(单线程无竞争)转化成json序列化
    2.缓存视频的基本信息(数据源在数据库伪代码)
        ![](media/15352402763810/15352532002602.jpg)
    3.分布式id计数器
</code>
哈希类型hash

相当于小的redis


<code>命令:

    hget key field      获取hash key对应的field的value
    hset key field value    设置hash key 对应field的value
    hdel key field      删除hash key对应field的value
    例:
    hset user:1:info age 23
    hget user:1:info age
    hgetall user:1:info
    hdel user:1:info age
    ---
    hexists key field   判断hash key 是否有field
    hlen key        获取hash key field的数量
    例:
    hexists user:1:info name
    hlen user:1:info
    ---
    hmget key field1 field2     批量获取field的值
    hmset key field1 value1 field2 value2
    例:
    hmset user:2:info age 30 name xx
    hget user:2:info age name
    ---
    hgetall key  o(n)     返回hash key所对应的field和value
    hvals key    o(n)     返回hash key所对应的field和value
    hkeys key   o(n)    返回hash key所对应的field
    例:
    hgetall user:2:info
    ---
    hsetnx key field value      设置hash key 对应field的value(如果field已经存在,则失败)
    hincrby key field intCounter    hash key对应的field的val自增intCounter
    hincrbyfloat key field floatCounter     自增浮点数
    ![](media/15352402763810/15352624299330.jpg)

实战:
    1.用户的访问量
        hincrby user:1:info pageview count
    2.缓存视频的基本信息
    ![](media/15352402763810/15352611469740.jpg)
</code>
列表类型list

特点:
有序
可重复
左右两边插入弹出
命令:

rpush key value1 value2... o(n) 从列表的右端插入值
lpush key value1 value2... o(n) 左端
linsert key before|after vlaue newValue o(n) 在list指定的值前|后插入newValue

lpop key o(1) 从左边弹出一个
rpop key o(1) 从右边弹出一个

ltrim key start end o(n) 按照索引范围修剪列表
ltrim key 1 5

lrange key start end (包含end) o(n) 获取列表指定索引范围的所有item
右->左 -1---
lindex key index o(n) 获取列表指定索引的item
llen key o(1) 获取列表长度

lset key index newValue o(n) 设置列表指定索引值为newValue

blpop key timeout o(1) lpop阻塞版本,timeout是阻塞超时时间,0为永不堵塞
brpop key timeout

实战:
1.微博列表
tip
1. lpush+lpop = stack
2. lpush+rpop = queue
3. lpush+ltrim = capped collection
4. lpush + brpop = message queue

集合类型set

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

sinter 两者的相同
sdiff 两者的不同
sunion 两者的全部
命令:
添加
sadd key element o(1) 向集合key中添加element(如果element已存在,添加失败)
删除
srem key element o(1) 将集合中element移除


scard user:1:follow (= 4) 计算集合的大小
sismember user:1:follow it (= 1(存在)) 判断it是否在集合中
srandmember user:1:follow count (= his) 从集合中挑选count个元素
spop user:1:follow (= sports) 从集合中随机弹出一个元素
smembers user:1:follow (= music his it) 获取集合中所有元素
---

集合间的命令
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中

实战:
抽奖

有序集合类型zset


命令:
score可重复/element不能重复
添加
zadd key score element(可以是多对) o(logN) 添加score 和element
删除
zrem key element(可以是多对) o(1) 删除元素
zscore key element o(1) 返回元素的分数
zincrby key increScore element 增加或减少元素的分数
zincrby user:1:ranking 9 mike
zcard key o(1) 返回元素的个数


zrange key start end [WITHSCORES] o(log(n)+m) 返回指定索引范围内的升序元素[分值] n,总的个数 m,统计的个数
zrange user:1:ranking 1 3 withscores




实战:
排行榜

赞(0) 打赏
未经允许不得转载:王明昌博客 » Redis学习笔记(二)API
分享到: 更多 (0)

相关推荐

  • 暂无文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮