标签:string 登录 redis 用户 setbit Redis2 k1 bitmap 字节
常用命令
-
redis-cli 连接客户端
-
redis-cli -p 6380 连接制定端口
-
redis-cli -h 帮助文档
-
select 8 选择库(默认16个库)
-
redis-cli -p 6380 -n 8 连接制定端口制定8号库
-
help @generic 查看通用组帮助
-
set key380 hello 设置key
-
get key380 获取key
-
keys * 查询所有key
-
FLUSHDB 清数据
String Byte
- 字符串
- 数值
- bitmap
字符串
命令
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
nx
表示无值的时候才执行成功(分布式锁)xx
表示有值的时候才执行成功mset k3 value3 k4 value4
含义为 more set,用来设置多个值mget k1 k2
获取两个值appenk k1 "world"
在k1后面追加worldGETRANGE k1 6 10
获取k1某两个索引之间的字符串子串(支持正负索引)GETRANGE k1 0 -1
-1
负索引SETRANGE k1 6 zhoum
从某个索引开始覆盖strlen k1
获取字符串长度getset k1 zhoum
取出旧值,并将旧值设置为新值 减少io通信msetnx k2 c k3 d
这个命令可以保证多笔操作是原子操作,类似于一个事务中type k1
查看k1
的value类型FLUSHALL
Remove all keys from all databasesobject encoding k1
如果value为1,上面的命令显示为int类型APPEND
INCR
等方法会改变数据的类型
命令指定类型
数值类型
INCR k1
+1INCRBY k1 23
+23decr k1
-1decrby k1 22
-22incrbyfloat k1 0.5
-0.5
二进制安全
redis 是二进制安全的,并不会去破坏你的编码,也不去关心你是什么编码。底层存储的时候,是按照Byte字节存储的。我们前面看到的encoding,只是为了让加减之类的运算方法变得更快一些。
在redis进程与外界交互的时候,redis存储的是字节流,而不会转换成字符流,也不会擅自按照某种数据类型存储,这样保证了数据不会被破坏,不会发生数据被截断/溢出等错误。
-
编码并不会影响数据的存储
-
因此,在多人使用redis的时候,我们一定要在用户端约定好数据的编码和解码。
Xshell
默认连接编码UTF-8
,UTF-8
中字3个字节GBK
两个字节redis-cli -p 6380 --raw
自动转连接编码(方便查看内容)
原子性命令 MSETNX
Set multiple keys to multiple values, only if none of the keys exist
bitmap
-
SETBIT k1 1 1
二进制位 1offset设为1执行
SETBIT k1 1 1
和setbit k1 7 1
值为01000001
get k1
为ASCII的A
再执行SETBIT k1 9 1
后 长度变为2,占两个字节 值为01000001 01000000
get k1
为ASCII的A@
2. BITPOS k1 1 0 0
返回第0个字节到第0个字节 第一个值为1的位置信息
k1为
01000001 01000000
执行BITPOS k1 1 0 0
返回1 执行BITPOS k1 1 0 1
返回 1
BITCOUNT k1 1 1 1
返回第1个字节到第1个字节 1出现的次数
BITOP and andkey k1 k2
多个值与或非操作andkey
保存结果
实际场景
- 公司有用户系统,让你统计用户登录天数,且时间窗口随机。例如,A用户在某一年中登陆了几次。怎么优化?
-
常见方式: 用数据库存放<ID,登录日期>
-
可以使用redis实现,假设一年400天,让每一天对应一个二进制位,需要50个字节即可。
setbit gary 1 1
第2天登录setbit gary 7 1
第8天登录setbit gary 364 1
第365天登录BITCOUNT gary -2 -1
统计 在最后16天的总登录次数
-
京东618做活动:登录就送礼物,大库备货多少礼物假设京东有2E用户
用户分:僵尸用户/冷热用户/忠诚用户
目标即为:活跃用户统计!
随即窗口比如说 1号~3号登录为活跃用户 连续登录要去重
setbit 20210801 1 1
1号用户在1号登录setbit 20210802 1 1
1号用户在2号登录setbit 20210802 7 1
7号用户在2号登录BITOP or destkey 20210801 20210802
用户(包括去重)存入destkeyBITCOUNT destkey 0 -1
计算人数
标签:string,登录,redis,用户,setbit,Redis2,k1,bitmap,字节 来源: https://www.cnblogs.com/zhoum/p/15159399.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。