限时免费试用:欢迎注册 api.bigmodel.org ,快速体验大模型 API 接入服务。
当前位置:首页 >数据库

Redis学习笔记(二)API

分类:数据库时间:2018-08-26浏览:3014

通用结构

  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
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计数器
哈希类型hash
相当于小的redis
命令:
    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)
列表类型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/500
Share your thoughts respectfully.