zoukankan      html  css  js  c++  java
  • Redis的 string类型&bitmap

    redis的 string类型&bitmap

    String 类型

    下面这些string类型命令 都可以用 help @string 查看 并且有解释意思

    1.进入进程的基本命令

    • 基本命令行 进入进程 启动redis **redis-cli -p **
    • set k380:1 hello 存入一个值“hello”
    • get k380:1 获取值 k380:1 得到hello
    • select 8 进入八号库
    • 再次获取 get k380:1 得到(nul) 空

    ![](https://img-1303875574.cos.ap-nanjing.myqcloud.com/img/get 和set K.png)

    • exit 退出当前进程
    • redis-cli -p 6379 -n 8 进入进程的时候直接选定进入八号库
    • 如果存入的值是中文,那么在客户端连接服务器时可以使用 redis-cli -raw
    • 清除所有key FLUSHDB

    2.key 字符串的基本操作

    单个key的创建和插入
    • 查看当前进程内的所有key :**keys ***

    • set k1 ooxx nx

    • get k1

    • set k1 hello nx

    • get k1

    • set k1 hello xx

    • get k1

      代码解释:

    • 创建一个新的key 名叫k1 加入值 ooxx 成功

    • get k1 获取k1的值 得到ooxx

    • set k1 hello nx 想要更改k1 的值为hello 失败(nil)

    • get k1 值没变 还是ooxx

    • 使用xx :set k1 hello xx 可以发现k1的值由ooxx变成了hello

    • 结论: set key value nx 和set key value xx ,nx只能用于创建而不能用于更新 更新用xx

    处理多个key

    • mset k1 value1 k2 value 2

    • mget k1 k2

    • 处理多个key的时候就可以使用 mset 和mget

    key的数据追加和获取

    • APPEND key名 ”追加的数据“

    • GETRANGE key名 开始位置 结束位置 , 位置是从0开始数空格算1个

    • 如果结束位置是最后 可以把结束位置得到值写成 -1

    • 如果想把数据全部获取 开始位置为0 结束位置为-1

    key的数据覆盖

    • SETRANGE key名 开始位置 新value
    key的获取长度

    STRLEN key名

    key值的新旧替换

    • getset key名 新value
    • 此命令也可以用于创建 但不会返回旧值

    3.key 的类型操作

    显示数据类型

    • OBJECT encoding key
    增加和减少

    • incr key名 ,值+1
    • incrby key名 num , 值+num

    • decr key名 ,值-1
    • decrby key名 num ,值减num
    • incrbyfloat key名 num ,此处的num是小数

    4)-原子性操作

    解释:

    1.我们msetnx 创建了两个key 分别是k1 k2 并且分别给了a b两个值

    2.mget k1和k2 得到a b 没什么问题

    3.当我们再msetnx k2 c k3 d 的时候问题就出现了 因为我们前面提到了 nx只能用于创建

    而此处的k2 已经存在b 值了 所以 这一命令到了k2这一步就停止了 k3不会被创建

    4.所以担当我们mget k1 k2 k3 的时候 k1 还是a k2没有更改成功 还是b 而k3压根就没有创建成功

    bitmap

    统计用户登录

    解释:

    • 因为运算是从0开始 所以 1是第二天 第一句 表示我第二天等陆了
    • 同理 7表示我第六条登录了
    • 364 表示我第365天登录了
    • strlen sean 因为八个字节算1位 所以 365天 (365➗8=45.***)使用46个位足够
    • 最后一句是统计 倒数第一天和倒数第二天登录了几次 返回值是1(只有365那天登录了)

    检测活跃用户(面试常考)

    解释:

    • 第一天 就是20190101这天 我(1) 登陆了一次

    • 第二天 就是20190102这天 我(1) 登录了一次

    • 还是第二天 20190102这天 张三(7) 登录了一次

    • 第三天 20190103这天 王五(4) 登陆了一次

      此时 我要算一下1 2 3 号这三天的活跃用户数量

    • bitop or deskey 20190101 20190102 20190103

      destkey是目标key 这个or是逻辑或算法

    • 最后 把这个目标key统计出来 结果是3 (我,张三 ,李四)

  • 相关阅读:
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    210 Course ScheduleII
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    sql 开发经验
  • 原文地址:https://www.cnblogs.com/beizhai/p/13796307.html
Copyright © 2011-2022 走看看