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、交集和并集,这里需要注意的是 权重和聚合,都会累加

posted @ 2020-10-20 10:42  黑质白章  阅读(1449)  评论(0编辑  收藏  举报