BZOJ 3453 - tyvj 1858 XLkxc(插值+推式子)
阿新 • • 發佈:2021-10-14
Redis資料型別
命令不區分大小寫,key區分大小寫
1、資料型別
- String (字串)
- Hash (雜湊)
- List (列表型別)
- Set (集合型別)
- SortedSet (有序集合型別,簡稱 Zset)
- Bitmap (點陣圖)
- HyperLoglog (統計)
- GEO (地理)
- Stream
2、String的使用
2.1 最常用
- set key value
- get key
2.2 同時設定/獲取多個鍵值
- mset key value [key, value, key ,value ……]
- mget key [key ……]
2.3 數值的增減
- 遞增數值 incr key
- 增加指定的整數 incrby key increment
- 遞減數值 decr key
- 減少指定的整數 decrby key decrment
2.4 獲取 字串長度
- strlen key
2.5 分散式鎖
- setnx key value
- set key value [EX seconds] [PX milliseconds] [NX|XX]
- EX 表示key 在多少秒之後過期
- PX 表示在多少毫秒之後過期
- NX 表示當key
不存在
的時候,才建立key,效果等同於 setnx - XX 表示當key
存在
的時候,覆蓋key
2.6 應用場景
- 抖音無限點贊某個視訊或者商品,點一下加一次
- 是否喜歡文章
3、Hash的使用
3.1 Map<String, Map<Object, Object>>
3.2 一次設定一個欄位值
- hset key feild value
3.3 一次獲取一個欄位值
- hget key feild
3.4 一次設定多個欄位值
- hmset key feild value [feild value ……]
- key 表示map的key
- feild表示 map中value的key
- value 表示 map 中value的value
3.5 一次獲取多個欄位值
- hmget key feild [feild……]
3.6 獲取所有欄位值
- hgetall key
3.7 獲取某個key內的全部數量
- hlen
3.8 刪除一個 key
- hdel
3.9 應用場景
- JD某物車早期
- 設計目前不再採用,當前中小廠可用
4、list的使用
4.1 說明
一個雙端連結串列的結構
,容量是2的32次方減一個元素,大概40多億,主要功能有 push/pop等,一般用在棧、佇列、訊息佇列等場景。
4.2 向列表左邊新增元素
- lpush key value [value ……]
4.3 向列表右邊新增元素
- rpush key value [value……]
4.4 檢視列表
- lrange key start stop
4.5 獲取列表中元素的個數
- llen key
4.6 應用場景
-
微信公眾號訂閱的訊息
-
商品評論列表
-
需求:使用者針對某一商品釋出評論時,一個商品會被不同的使用者進行評論,儲存商品評論時,要按照時間排序
-
需求:使用者在前段頁面查詢該商品時,需要按照時間順序降序排序
-
實現:
-
使用list儲存商品評論資訊,key是該商品的id,value是商品評論資訊商品編號為 1001的商品評論key 【items:comment:1001】
-
lpush items:comment:1001 {"id":1001, "name":"huawei", "date": 1634634833, "content":"ljhgka;fafagakg;ahafaf;ohiga"}
-
-
5、set的使用 (無重複)
無重複資料的容器
5.1 新增元素
- sadd key member [member……]
5.2 刪除元素
- srem key member [member……]
5.3 遍歷集合中的所有元素
- smembers key
5.4 判斷元素 是否在集合中
- sismember key member
5.5 獲取集合中的元素總數
- scard key
5.6 從集合中隨機彈出一個元素,元素不刪除
- srandmember key [數字]
5.7 從集合中隨機彈出一個元素,出一個刪一個
- spop key [數字]
5.8 集合運算
- A、B
- A : abc12
- B: 123ax
- 集合的差集運算 A-B
- 屬於A但是不屬於B的元素構成的集合
sdiff key [key……]
- 集合的交集運算 A∩B
- 屬於A同時也屬於B的共同擁有的元素構成的集合
sinter key [key……]
- 集合的並集運算 A∪B
- 屬於A或者屬於B的元素合併後的集合
sunion key [key……]
5.9 應用場景
- 微信抽獎小程式
- 使用者ID,立即參與按鈕 => sadd key 使用者ID
- 顯示已經有多少人蔘與了=> scard key
- 抽獎(從set中任意選取N箇中獎人) => srandmember key 2 => 隨機抽獎兩個人,元素
不刪除
- spop key 3 => 隨機抽獎3個人,元素
會刪除
- spop key 3 => 隨機抽獎3個人,元素
- 微信朋友圈點贊
- 新增點贊 => sadd pub:msgID 點贊使用者ID1 點贊使用者ID2
- 取消點贊 => srem pub:msgID 點贊使用者ID
- 展示所有點贊過的使用者 => smembers pub:msgID
- 點贊使用者數統計,就是常見的點贊紅色陣列 => scard pub:msgID
- 判斷某個朋友是否對樓主點贊過 => sismember pub:msgID 使用者ID
- 微博好友關注社交關係
- 共同關注的人
- 我關注的人也關注他(大家愛好相同)
- QQ內推可能認識的人
6、Zset的使用
向有序集合中加入一個元素和該元素的分數
6.1 新增元素
- zadd key
score
member [score member ……]
6.2 按照元素分數從小到打的順序,返回索引從 start 到 stop 之間的所有元素
- zrange key start stop [withscores]
6.3 獲取元素的分數
- Zscore key member
6.4 刪除元素
- zrem key member [member……]
6.5 獲取指定分數範圍的元素
- zrangebyscore key min max [withscores] [limit offset count]
6.6 增加某個元素的分數
- zincrby key increment member
6.7 獲取集合中元素的數量
- zcard key
6.8 獲取元素的排名
- 從小到大
- zrank key member
- 從大到小
- zrevrank key member
6.9 應用場景
- 根據商品銷售隊商品進行排序顯示
- 思路:定義商品銷售排行榜 (sorted set集合),key為goods:sellsort,分數為商品銷售數量
- 商品編號1001的銷量是9,商品編號1002的銷量是15 => zadd goods:sellsort 9 1001 15 1002
- 有一個客戶又買了兩件商品1001,商品編號1001銷量加2 => zincrby goods:sellsort 2 1001
- 求商品銷量前10名 => zrange goods:sellsort 0 10 withscores
- 抖音熱搜
- 點選視訊 => zincrby hotvcr:20211019 1 八佰
- zincrby hotvcr:20211019 15 八佰 2 花木蘭
- 展示當日排行前10條 => zrevrange hotvcr:20211019 0 9 withscores
- 點選視訊 => zincrby hotvcr:20211019 1 八佰