zoukankan      html  css  js  c++  java
  • redis五种基本类型

    String类型

    set k1 aaa
    append k1 "bbb"
    getrange k1 0 -1
    setrange k1 5(不能负数)  ccc  替换,不够就补
    
    object help
    object encoding k1 字符串是 embstr、raw、int
    
    incr k2
    incrbyfloat k3 0.5
    decr k2 
    msetnx k1 a k2 b nx没值才能设置成功 如果一个失败全部失败 原子性
    mget k1 k2
    strlen k1
    setex k2 10 aa
    
    
    man ascii查看ascii码表
    

      

    判断海量用户中某个用户是否在线呢

    SETBIT 命令
    SETBIT <key> <offset> <value>
    
    GETBIT 命令
    GETBIT <key> <offset>
    
    用户登录:
    SETBIT login_status 10086 1
    
    查询用户是否登录:
    GETBIT login_status 10086
    
    推出登录:
    SETBIT login_status 10086 0

    统计编号 89757 的用户在 2021 年 5 月份的打卡情况要如何进行?

    key 可以设计成 uid:sign:{userId}:{yyyyMM},月份的每一天的值 - 1 可以作为 offset(因为 offset 从 0 开始,所以 offset = 日期 - 1)
    
    第一步,执行下面指令表示记录用户在 2021516 号打卡:
    SETBIT uid:sign:89757:202105 15 1
    
    第二步,判断编号 89757 用户在 2021516 号是否打卡:
    GETBIT uid:sign:89757:202105 15
    
    第三步,统计该用户在 5 月份的打卡次数,使用 BITCOUNT 指令。该指令用于统计给定的 bit 数组中,值 = 1 的 bit 位的数量:
    BITCOUNT uid:sign:89757:202105

    统计这个月首次打卡时间

    BITPOS uid:sign:89757:202105 1

    统计多个bit数组同时存在的模型id

    操作   key 模型id 是否存在的状态

    setbit aa 1 1
    setbit aa 6 1
    setbit aa 7 1

    setbit bb 1 1
    setbit bb 6 1

    bitop and andkey aa bb

    bitcount andkey 结果:2
    bitpos andkey 1 结果:1
    setbit andkey 1 0

    bitcount andkey 结果:1
    bitpos andkey 1 结果:6
    setbit andkey 6 0

    bitcount andkey 结果:0
    bitpos andkey 1 结果:-1


    2^35 340亿bit = 4G内存

    List类型

    help @list
    
    127.0.0.1:6379> lpush list1  a b c d e f
    (integer) 6
    127.0.0.1:6379> lpop list1
    "f"
    127.0.0.1:6379> rpop list1
    "a"
    1.同向命令先进后出、类似栈。
    2.反向命令先进先出、类似队列。
    
    127.0.0.1:6379> lrange list1 0 -1
    1) "c"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    取出下标为2的元素
    127.0.0.1:6379> lindex list1 2
    "2"
    取出最后一个元素
    127.0.0.1:6379> lindex list1 -1
    "4"
    类似数组

    List移除

    127.0.0.1:6379> lpush k1 a 1 a 2 a 3
    (integer) 6
    127.0.0.1:6379> lrange k1 0 -1
    1) "3"
    2) "a"
    3) "2"
    4) "a"
    5) "1"
    6) "a"
    127.0.0.1:6379> lrem k1 2 a
    (integer) 2
    127.0.0.1:6379> lrange k1 0 -1
    1) "3"
    2) "2"
    3) "1"
    4) "a"
    插入
    127.0.0.1:6379> linsert k1 before 1 a
    (integer) 5
    127.0.0.1:6379> lrange k1 0 -1
    1) "3"
    2) "2"
    3) "a"
    4) "1"
    5) "a"
    127.0.0.1:6379> linsert k1 after 1 b
    (integer) 6
    127.0.0.1:6379> lrange k1 0 -1
    1) "3"
    2) "2"
    3) "a"
    4) "1"
    5) "b"
    6) "a"

    List阻塞

    阻塞队列、单播队列
    blpop one 0 先阻塞先拿到
    
    ltrim 删除两端的数据
    ltrim key  0  -1 一个不删

    Hash类型

    当单个字符不使用hash时存储方式
    set sean::age  18
    set sean::hobby  gril
    keys sean*
    
    hset sean age 18
    hmset sean age 20 address games
    hget sean age
    hmget sean age address
    hkeys sean
    hvals sean
    hgetall sean
    hincrbyfloat xiaoming age 18.5
    hget xiaoming age
    hincrbyfloat xiaoming age -1

    Set类型

    127.0.0.1:6379> sadd k1 xiaoke xiaowang xiaoming sean tom xiaoke
    (integer) 5
    127.0.0.1:6379> smembers k1
    1) "sean"
    2) "xiaoming"
    3) "xiaowang"
    4) "tom"
    5) "xiaoke"
    去重xiaoke
    
    删除
    127.0.0.1:6379> srem k1 xiaoke xiaowang
    (integer) 2
    127.0.0.1:6379> smembers k1
    1) "tom"
    2) "xiaoming"
    3) "sean"

    set集合操作

    127.0.0.1:6379> sadd key1  1 2 3 4
    (integer) 4
    127.0.0.1:6379> sadd key2  3 4 5 6
    (integer) 4
    取交集
    127.0.0.1:6379> sinter key1 key2
    1) "3"
    2) "4"
    取并集
    127.0.0.1:6379> sunion key1 key2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "6"
    取差集
    127.0.0.1:6379> sdiff key1 key2
    1) "1"
    2) "2"
    127.0.0.1:6379> sdiff key2 key1
    1) "5"
    2) "6"

    随机事件

    srandmember key  count
    整数: 取出一个去重的结果集(不能超过已有集合)
    负数:取出一个带重复的结果集,一定满足你需要的数量
    0: 不返回
    案例:抽奖
    
    127.0.0.1:6379> sadd name tom xiaoke xiaowang sean jerry
    (integer) 5
    127.0.0.1:6379> srandmember name 4
    1) "xiaowang"
    2) "tom"
    3) "xiaoke"
    4) "jerry"
    127.0.0.1:6379> srandmember name -4
    1) "xiaowang"
    2) "tom"
    3) "tom"
    4) "tom"
    127.0.0.1:6379> srandmember name 10
    1) "tom"
    2) "xiaoke"
    3) "sean"
    4) "xiaowang"
    5) "jerry"
    127.0.0.1:6379> srandmember name -10
     1) "tom"
     2) "sean"
     3) "xiaoke"
     4) "sean"
     5) "tom"
     6) "jerry"
     7) "xiaowang"
     8) "sean"
     9) "jerry"
    10) "jerry"
    
    从奖品堆中删除
    spop key count
    127.0.0.1:6379> smembers name
    1) "tom"
    2) "xiaowang"
    3) "sean"
    4) "xiaoke"
    127.0.0.1:6379> spop name 2
    1) "xiaowang"
    2) "tom"
    127.0.0.1:6379> smembers name
    1) "sean"
    2) "xiaoke"

    Sorted_set有序集合

    127.0.0.1:6379> zadd k1 8 apple 2 banana 3 orange
    (integer) 3
    查看所有水果
    127.0.0.1:6379> zrange k1 0 -1
    1) "banana"
    2) "orange"
    3) "apple"
    
    查看所有水果带上价格
    127.0.0.1:6379> zrange k1 0 -1 withscores
    1) "banana"
    2) "2"
    3) "orange"
    4) "3"
    5) "apple"
    6) "8"
    
    查看所有水果价格在3到8之间
    127.0.0.1:6379> zrangebyscore k1 3 8
    1) "orange"
    2) "apple"
    
    价格由低到高前两名水果
    127.0.0.1:6379> zrange k1 0 1
    1) "banana"
    2) "orange"
    
    价格由高到低前两名水果
    127.0.0.1:6379> zrevrange k1 0 1
    1) "apple"
    2) "orange"
    127.0.0.1:6379> zrange k1 -2 -1
    1) "orange"
    2) "apple"
    
    取出苹果的分数
    127.0.0.1:6379> zscore k1 apple
    "8"
    
    取出苹果的排名
    127.0.0.1:6379> zrank k1 apple
    (integer) 2

    集合操作

    127.0.0.1:6379> zadd k1 80 tom 60 sean 70 baby
    (integer) 3
    127.0.0.1:6379> zadd k2 60 tom 100 sean 40 jack
    (integer) 3
    
    取交集(相加)
    127.0.0.1:6379> zunionstore unkey 2 k1 k2
    (integer) 4
    127.0.0.1:6379> zrange unkey 0 -1 withscores
    1) "jack"
    2) "40"
    3) "baby"
    4) "70"
    5) "tom"
    6) "140"
    7) "sean"
    8) "160"
    
    取交集权重
    127.0.0.1:6379> zunionstore unkey1 2 k1 k2 weights 1 0.5
    (integer) 4
    127.0.0.1:6379> zrange unkey1 0 -1 withscores
    1) "jack"
    2) "20"
    3) "baby"
    4) "70"
    5) "sean"
    6) "110"
    7) "tom"
    8) "110"
    
    取交集最大
    127.0.0.1:6379> zunionstore unkey2 2 k1 k2 aggregate max
    (integer) 4
    127.0.0.1:6379> zrange unkey2 0 -1 withscores
    1) "jack"
    2) "40"
    3) "baby"
    4) "70"
    5) "tom"
    6) "80"
    7) "sean"
    8) "100"
    
    排序是怎么实现的,增删改查的速度?
    跳跃表,平均值(增删改查)最优
  • 相关阅读:
    2020-2021-1 20209305 《Linux内核原理与分析》第九周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第八周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第七周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第六周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第五周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第四周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第三周作业
    2020-2021-1 20209305 《Linux内核原理与分析》第二周作业
    2020-2021-1 20209309《Linux内核原理与分析》第十二周作业
    2020-2021-1 20209309《Linux内核原理与分析》第十一周作业
  • 原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/14288649.html
Copyright © 2011-2022 走看看