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、交集和並集,這里需要注意的是 權重和聚合,都會累加
