常用命令
-
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存储的是字节流,而不会转换成字符流,也不会擅自按照某种数据类型存储,这样保证了数据不会被破坏,不会发生数据被截断/溢出等错误。
@H_404_219@
原子性命令 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
保存结果
实际场景
-
可以使用redis实现,假设一年400天,让每一天对应一个二进制位,需要50个字节即可。
setbit gary 1 1
第2天登录setbit gary 7 1
第8天登录setbit gary 364 1
第365天登录
-
京东618做活动:登录就送礼物,大库备货多少礼物假设京东有2E用户
BITOP or destkey 20210801 20210802
用户(包括去重)存入destkeyBITCOUNT destkey 0 -1
计算人数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。