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