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 (我,张三 ,李四)

原文地址:https://www.cnblogs.com/beizhai/p/13796307.html