redis客户端的使用
1、客户端连接 :redis-cli ,通过help命令可知晓怎么使用redis.
同时,通过service redis-cli -help连接,也可以查看连接时
可以通过help @string来查看详细介绍
2、redis的五种value
Redis 中不管类型如何,都会存在2个序列。
正序列 | 0 | 1 | 2 | 3 | 4 | 5 |
序列 | a | b | c | d | e | f |
反序列 | -6 | -5 | -4 | -3 | -2 | -1 |
Key-value:
①string
当年存入一个中文,由于它根据不同的编码会生成不同的字节码。会出现如下情况,查询出来是字节码。
当然,我们也可以用如下方法启动redis,使之直接查询结果而非字节码。
编码类型是依据每个客户端自行选择的,这是redis给的一项权利。
redis的二进制安全
二进制安全,说白了就是传输的文件内容不能改变。因为有很多字节码解析方式GBK\utf-8扽等,在redis把编码格式给了用户,所以为了不取出乱码文件,严格统一编码格式。
1、字符串
①、get\set用法
②append
③strlen 查看字符串长度
④setrange
从指定的偏移量开始,在键处覆盖字符串的一部分
⑤getrange
获取存储在键上的字符串的子字符串
2、bitmap(缓存、统计方面)
⑤bitop和bitcount相关的命令皆是位操作
Bitcount key start end
Key:已存在的key
Start: 起始位
End: 结束位
一个key,如果你不确定它的长度,而你又想统计它全部为1的总数:bitcount k1 0 -1
Operation: 与或非(or and)
Destkey: 生成的结果集的key
Key… 要参与位运算的key
⑥setbit 和 gitbit
*** setbit p1 p2 p3
*p1: key
*p2: 1byte = 8bit(0-7)(可以是0~) 超过7 则多一个byte.
*p3: 1或0
场景1 以浏览和未浏览的区分
https://www.cnblogs.com/K-artorias/p/8463286.html
场景2
可以实现 统计一年内登陆天数
例如:一年365天,默认为0,登陆为1。
第一天开始 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
~~~ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
最后一天 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 |
------------------------------------------------------------------------------
如上图数据,配置setbit:
Setbit k1 0 1 , Setbit k1 1 1 , Setbit k1 3 1,Setbit k1 5 1
Setbit k1 364 1,Setbit k1 361 1,Setbit k1 360 1,Setbit k1 358 1
此时,要统计今年登陆的天数只要计算k1中的value=1的个数。
Bitcount:特殊提示: setbit的key,随着你的设置长度而增加。
场景3
统计一个月内的活跃用户
???问题,求连续登陆2天以上的用户???
查询结果:3人中连续登陆3天的只有1人。
查询结果:3人中连续登陆2天的只有2人。
3、数值(秒杀、详情页、点赞、评论)
①通过type key 查询value存储的类型
②通过object+" "+" "+encoding key的方式可以查询redis底层以什么格式存储这些值的。
④incr 和 decr
Incr 和 decr延展
incrby和decrby,后接增幅
②list
Lrange = list + range
a、查询list指定范围。
b、查询list长度
c、向已存在的list中添加元素
1、描述栈(正向命令)后进先出
这里的lpush/rpush= left/right + push,从左边压入每一个元素,同样lpop也是从左边弹出。
所以 a b c d e f 按照顺序压入,f最先弹出来。
2、描述队列(反像命令)先进先出
描述队列只需要左放右出/右出左放
3、描述数组
d、删除list中指定数量的元素
e、根据列表中的元素的索引设置其值
f、将列表修剪到指定范围
g、删除列表中的最后一个元素,将其添加到另一个列表中并返回
4、单播队列(一次只够一个人消化)、阻塞
BL/RPOP阻塞式弹出
bLPOP = block + left + pop
---------------------------------------
***此时redis中没有k1****
Pc1的情况
Pc2的情况
由此可见,先请求先获得。而且弹出一个元素后就立马弹出下一个。
③hashMap(场景:详情页、点赞)
a、HSET/HGET 和 hmset/ hmget
b、HGETALL 、HDEL 、HKEYS 、HLEN 、HSTRLEN
c、hincrby和hincrbyfloat
d、hscan 、hSETnx
④set(去重、抽奖)
a、基本操作sadd 、scard 、smembers 、sismember、srem
b、多个集合之间的"关系"集
1、交集 SINTER 和 SINTERSTORE
2、差集 SDIFF 和 SDIFFSTORE
3、并集 UNION 和 UNIONSTORE
4、随机数 与 其它
a、SRanDmember 随机弹出n个元素
b、spop随机弹出一个元素
c、smove移动元素
⑤有序集合sorted set(排名)
是为什么有序集合?
就是可以比set多设置一个"score"参数。而且遍历set会根据score参数排序。
Sorted_set的命令都是以Z开头!!!
a、set内基本操作
b、各类方式删除元素
c、筛选后通过分数排名(场景:电影排名、下载排名)
d、交集和并集,这里需要注意的是 权重和聚合,都会累加