本文共 6139 字,大约阅读时间需要 20 分钟。
1.基本命令
redis-cli //启动客户端,默认启动端口为6379
exit //退出 redis-cli -h //查看帮助 redis-cli -h 主机ip //连接到具体某一个主机 redis-cli -p 端口号 //连接到具体端口号 redis-cli -a 密码 //输入验证密码 redis-cli -n <数据库number > //连接数据库 0.1…15
redis默认16个库
[root@localhost ~]# redis-cli -p 6380
127.0.0.1:6380> set k380:1 hello //默认数据进入0号库 OK 127.0.0.1:6380> get k380:1 “hello” 127.0.0.1:6380> select 8 //选择8号库 OK 127.0.0.1:6380[8]> get k380:1 (nil) 127.0.0.1:6380[8]> exit [root@localhost ~]# redis-cli -p 6380 -n 8 //连接时指定8号库 127.0.0.1:6380[8]> exit
redis学会使用帮助
[root@localhost ~]# redis-cli
127.0.0.1:6379> help redis-cli 6.2.1 To get help about Redis commands type: “help @” to get a list of commands in "help " for help on "help " to get a list of possible help topics “quit” to exit To set redis-cli preferences: “:set hints” enable online hints “:set nohints” disable online hints Set your preferences in ~/.redisclirc
127.0.0.1:6380>keys * //显示建过的key
127.0.0.1:6380> FLUSHDB //清库
#2.数据类型String
##2.1 字符串命令127.0.0.1:6380>set k1 hello nx //k1不存在时设置为hello 可以用做分布式锁
127.0.0.1:6380>sek k1 hello xx //k1存在时更新为hello 127.0.0.1:6380> mset k1 1 k2 2 //同时设置多个健值对 OK 127.0.0.1:6380> get k1 “1” 127.0.0.1:6380> get k2 “2” 127.0.0.1:6380> mget k1 k2 //同时获取多个健值对
append 追加命令
127.0.0.1:6380>get k1
“1” 127.0.0.1:6380>append k1 " world" //追加字符 (integer) 7 127.0.0.1:6380>get k1 “1 world”
GETRANGE 截取字符串
127.0.0.1:6380>GETRANGE k1 5 7 //截取字符
“ld”
正反向索引:每一个字符既有正向索引又有反向索引
GETRANGE 获取某一区间字符串127.0.0.1:6380>GETRANGE k1 5 -1 //获取下标从5到最后的字符
“ld” 127.0.0.1:6380>GETRANGE k1 0 -1 //获取从0到-1 是所有字符 “1 world”
127.0.0.1:6380> get k1
“1 world” 127.0.0.1:6380>SETRANGE k1 5 mashibing //从下标5开始替换 127.0.0.1:6380> get k1 “1 wormashibing”
STRLEN命令 查看字符串长度
127.0.0.1:6380> get k1
“1 wormashibing” 127.0.0.1:6380> STRLEN k1 (integer) 14
type命令 查看value类型
127.0.0.1:6380> type k1 //看 value的类型
string 127.0.0.1:6380> help set //set命令的group是string 所以value是string类型 SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET] summary: Set the string value of a key since: 1.0.0 group: string 127.0.0.1:6380> set k1 99 OK 127.0.0.1:6380> type k1 string
object命令
encoding类型有三种: embstr integer raw127.0.0.1:6380> object help //查看object使用帮助
127.0.0.1:6380> set k1 99 OK 127.0.0.1:6380> set k2 hello OK 127.0.0.1:6380> OBJECT encoding k2 “embstr” 127.0.0.1:6380> OBJECT encoding k1 “int” 127.0.0.1:6380> set k39 jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj OK 127.0.0.1:6380> OBJECT encoding k39 “embstr” 127.0.0.1:6380> append k39 jjjjj (integer) 45 127.0.0.1:6380> OBJECT encoding k39 “raw”
encoding类型
二进制安全:redis进程与外界交互时,获取的是字节数组,即从socket中拿到的是字节流。原因:有统一编解码数据不会被破坏。127.0.0.1:6380> set k1 hello
OK 127.0.0.1:6380> strlen k1 (integer) 5 127.0.0.1:6380> set k2 9 OK 127.0.0.1:6380> OBJECT encoding k2 “int” 127.0.0.1:6380> strlen k2 (integer) 1 127.0.0.1:6380> append k2 999 (integer) 4 127.0.0.1:6380> get k2 “9999” 127.0.0.1:6380> object encoding k2 “raw” 127.0.0.1:6380> incr k2 (integer) 10000 127.0.0.1:6380> object encoding k2 “int” 127.0.0.1:6380> strlen k2 (integer) 5 127.0.0.1:6380> set k3 a OK 127.0.0.1:6380> get k3 “a” 127.0.0.1:6380> strlen k3 (integer) 1 127.0.0.1:6380> append k3 中 (integer) 4 127.0.0.1:6380> strlen k3 (integer) 4
incr命令,是将字节从内存中拿出来,转换为数值,更新key上encoding为int,便于计算。
127.0.0.1:6380> set k2 中
OK 127.0.0.1:6380> STRLEN k2 //utf-8格式 中文占用3个字节 (integer) 3 不带–raw只识别ask码,若不是ask码 则按照二进制显示。加了会触发编码集的格式化 127.0.0.1:6380> redis-cli --raw //以raw方式启动 redis hbase都是二进制数据安全的
用redis时沟通好数据的编码和解码
##2.2数值操作命令
incr incrby127.0.0.1:6380> set k1 99
OK 127.0.0.1:6380> incr k1 (integer) 100 127.0.0.1:6380> INCRBY k1 22 (integer) 122
decr
decrby incrbyfloat127.0.0.1:6380> get k1
“122” 127.0.0.1:6380> decr k1 (integer) 121 127.0.0.1:6380> DECRBY k1 22 (integer) 99 127.0.0.1:6380> INCRBYFLOAT k1 0.5 “99.5”
setget命令:考虑成本问题开发此命令,通信时只需发一个命令,减少一次io通信
127.0.0.1:6380> set k1 hello
OK 127.0.0.1:6380> get k1 “hello” 127.0.0.1:6380> getset k1 baby //返回旧值,且更新此key对应的value “hello”
msetnx
mget 上面两个操作均为原子性操作127.0.0.1:6380> FLUSHALL //清库存
OK 127.0.0.1:6380> keys * (empty array) 127.0.0.1:6380> msetnx k1 1 k2 2 //一次多设置几个健值对 当key不存在时才设置成功。 (integer) 1 127.0.0.1:6380> mget k1 k2 //一次多获取几个健对应的值
- “1”
- “2”
msetnx是原子性操作:k2已存在 所以设置失败,k3不存在本应设置成功,但因是原子性操作,因此也设置失败。
127.0.0.1:6380> MSETNX k2 c k3 d
(integer) 0 127.0.0.1:6380> mget k1 k2 k3
- “1”
- “2”
- (nil)
##2.3bitmap
offset:二进制位的偏移量man ascii //可以查看asc码
1、BIN:binary,二进制的; 2、OCT:octal,八进制的; 3、HEX:hexadecimal,十六进制的; 4、DEC:decimal,十进制的。 当输入 man ascii 提示 没有 ascii 的手册页条目 证明没有安装man-pages yum install -y man-pages
setbit 命令 :更改bit位的值
127.0.0.1:6379>help setbit
127.0.0.1:6379> setbit k1 1 1 //k1中第一位改为1 (integer) 0 127.0.0.1:6379> STRLEN k1 (integer) 1 127.0.0.1:6379> get k1 “@” 127.0.0.1:6379> SETBIT k1 7 1 //k1中第七位改为1 (integer) 0 127.0.0.1:6379> STRLEN k1 (integer) 1 127.0.0.1:6379> get k1 “A” 127.0.0.1:6379> 上面更改 用图形展示 如下:![]()
127.0.0.1:6379> setbit k1 9 1 //第九位设置为1
(integer) 0 127.0.0.1:6379> strlen k1 //长度为2 (integer) 2 127.0.0.1:6379> get k1 “A@”
字符集标准的是ackii,其他的是扩展字符集。其他字符集不再对ackii重编码,复用。0XXXXXXX
bitpos命令 :返回在二进制位第一次出现的位置
127.0.0.1:6379> BITPOS 1 0 0
(integer) 0 127.0.0.1:6379> BITPOS k1 1 0 0 // (integer) 1 127.0.0.1:6379> BITPOS k1 1 1 1 (integer) 9
bitcount命令:统计1出现几次
127.0.0.1:6379> BITCOUNT k1 0 1 //1在第0到第1个字节中 出现次数
(integer) 3
bitop命令
bitop and endkey k1 k2 //k1 k2按位与 结果存为endkey (有0为0 全1则1)
bitop or endkey k1 k2 //k1 k2按位或 结果存为endkey (有1则1 全0则0)
3.bitmap场景:
1.统计用户登录次数 一年365天 一天用一个bit位表示;便于统计任意区间登录次数127.0.0.1:6379> setbit sean 1 1
(integer) 0 127.0.0.1:6379> setbit sean 7 1 (integer) 0 127.0.0.1:6379> setbit sean 364 1 (integer) 0 127.0.0.1:6379> STRLEN sean (integer) 46 127.0.0.1:6379> BITCOUNT sean -2 -1 //最后15天用户登录次数 (integer) 1 127.0.0.1:6379>
2.假如618组织活动 用户只要登录就送礼物,问需要备货多少礼物?
假设京东有2亿用户 活跃用户进行统计 比如统计1号到3号活跃用户数,重复登录要去重127.0.0.1:6379> setbit 20210101 1 1 //20210101日第一个用户登录一次
(integer) 0 127.0.0.1:6379> setbit 20210102 1 1 //20210102日第一个用户登录一次 (integer) 0 127.0.0.1:6379> setbit 20210102 7 1 //20210102日第7个用户登录一次 (integer) 0 127.0.0.1:6379> bitop or destkey 20210101 20210102 //按位或 (integer) 1 127.0.0.1:6379> bitcount destkey 0 -1 //统计登录次数 已去重(统计第零个字节到最后一个字节1出现的次数) (integer) 2
网址:db-engines.com
查看几种类型数据库区别转载地址:http://bwvhz.baihongyu.com/