精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot+Redis BitMap 實現(xiàn)簽到與統(tǒng)計功能

開發(fā) 前端
我們可以根據(jù) Redis中 提供的 BitMap 位圖功能來實現(xiàn),每次簽到與未簽到用0 或1 來標識 ,一次存31個數(shù)字,只用了2字節(jié) 這樣我們就用極小的空間實現(xiàn)了簽到功能。

各個項目中,我們都可能需要用到簽到和 統(tǒng)計功能。簽到后會給用戶一些禮品以此來吸引用戶持續(xù)在該平臺進行活躍。

簽到功能,我們可以通過Redis中的 BitMap功能來實現(xiàn)。

一、Redis BitMap 基本用法

BitMap 基本語法、指令

簽到功能我們可以使用MySQL來完成,比如下表:

圖片圖片

用戶一次簽到,就是一條記錄,假如有1000萬用戶,平均每人每年簽到次數(shù)為10次,則這張表一年的數(shù)據(jù)量為 1億條。

每簽到一次需要使用(8 + 8 + 1 + 1 + 3 + 1)共22 字節(jié)的內(nèi)存,一個月則最多需要600多字節(jié)。

這樣的壞處,占用內(nèi)存太大了,極大的消耗內(nèi)存空間!

我們可以根據(jù) Redis中 提供的 BitMap 位圖功能來實現(xiàn),每次簽到與未簽到用0 或1 來標識 ,一次存31個數(shù)字,只用了2字節(jié) 這樣我們就用極小的空間實現(xiàn)了簽到功能。

BitMap 的操作指令:

  • SETBIT:向指定位置(offset)存入一個0或1
  • GETBIT:獲取指定位置(offset)的bit值
  • BITCOUNT:統(tǒng)計BitMap中值為1的bit位的數(shù)量
  • BITFIELD:操作(查詢、修改、自增)BitMap中bit數(shù)組中的指定位置(offset)的值
  • BITFIELD_RO:獲取BitMap中bit數(shù)組,并以十進制形式返回
  • BITOP:將多個BitMap的結(jié)果做位運算(與 、或、異或)
  • BITPOS:查找bit數(shù)組中指定范圍內(nèi)第一個0或1出現(xiàn)的位置

使用 BitMap 完成功能實現(xiàn)

服務(wù)器Redis版本采用 6.2。

進入redis查詢 SETBIT 命令

圖片圖片

新增key 進行存儲

圖片圖片

查詢 GETBIT命令

圖片圖片

查看指定坐標的簽到狀態(tài)

圖片圖片

查詢 BITFIELD

圖片圖片

無符號查詢

圖片圖片

BITPOS 查詢1 和 0 第一次出現(xiàn)的坐標

圖片圖片

二、SpringBoot 整合 Redis 實現(xiàn)簽到 功能

需求介紹

采用BitMap實現(xiàn)簽到功能

  • 實現(xiàn)簽到接口,將當(dāng)前用戶當(dāng)天簽到信息保存到Redis中

思路分析:

我們可以把 年和月 作為BitMap的key,然后保存到一個BitMap中,每次簽到就到對應(yīng)的位上把數(shù)字從0 變?yōu)?,只要是1,就代表是這一天簽到了,反之咋沒有簽到。

實現(xiàn)簽到接口,將當(dāng)前用戶當(dāng)天簽到信息保存至Redis中

圖片圖片

提示:因為BitMap 底層是基于String數(shù)據(jù)結(jié)構(gòu),因此其操作都封裝在字符串操作中了。

圖片圖片

核心源碼

UserController

@PostMapping("sign")
public Result sign() {
    return userService.sign();
}

UserServiceImpl

public Result sign() {
    //1. 獲取登錄用戶
    Long userId = UserHolder.getUser().getId();
    //2. 獲取日期
    LocalDateTime now = LocalDateTime.now();
    //3. 拼接key
    String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
    String key = RedisConstants.USER_SIGN_KEY + userId + keySuffix;
    //4. 獲取今天是本月的第幾天
    int dayOfMonth = now.getDayOfMonth();
    //5. 寫入redis setbit key offset 1
    stringRedisTemplate.opsForValue().setBit(key, dayOfMonth -1, true);
    return Result.ok();
}

接口進行測試

ApiFox進行測試

圖片圖片

查看Redis 數(shù)據(jù)

圖片圖片

三、SpringBoot 整合Redis 實現(xiàn) 簽到統(tǒng)計功能

問題一:什么叫做連續(xù)簽到天數(shù)?

從最后一次簽到開始向前統(tǒng)計,直到遇到第一次未簽到為止,計算總的簽到次數(shù),就是連續(xù)簽到天數(shù)。

圖片圖片

邏輯分析:

獲得當(dāng)前這個月的最后一次簽到數(shù)據(jù),定義一個計數(shù)器,然后不停的向前統(tǒng)計,直到獲得第一個非0的數(shù)字即可,每得到一個非0的數(shù)字計數(shù)器+1,直到遍歷完所有的數(shù)據(jù),就可以獲得當(dāng)前月的簽到總天數(shù)了

問題二:如何得到本月到今天為止的所有簽到數(shù)據(jù)?

BITFIELD key GET u[dayOfMonth] 0

假設(shè)今天是7號,那么我們就可以從當(dāng)前月的第一天開始,獲得到當(dāng)前這一天的位數(shù),是7號,那么就是7位,去拿這段時間的數(shù)據(jù),就能拿到所有的數(shù)據(jù)了,那么這7天里邊簽到了多少次呢?統(tǒng)計有多少個1即可。

問題三:如何從后向前遍歷每個Bit位?

注意:bitMap返回的數(shù)據(jù)是10進制,哪假如說返回一個數(shù)字8,那么我哪兒知道到底哪些是0,哪些是1呢?

我們只需要讓得到的10進制數(shù)字和1做與運算就可以了,因為1只有遇見1 才是1,其他數(shù)字都是0 ,我們把簽到結(jié)果和1進行與操作,每與一次,就把簽到結(jié)果向右移動一位,依次內(nèi)推,我們就能完成逐個遍歷的效果了。

需求:

實現(xiàn)以下接口,統(tǒng)計當(dāng)前截至當(dāng)前時間在本月的連續(xù)天數(shù)。

圖片圖片

有用戶有時間我們就可以組織出對應(yīng)的key,此時就能找到這個用戶截止這天的所有簽到記錄,再根據(jù)這套算法,就能統(tǒng)計出來他連續(xù)簽到的次數(shù)了。

核心源碼

UserController

@GetMapping("/signCount")
public Result signCount() {
    return userService.signCount();
}

UserServiceImpl

public Result signCount() {
    //1. 獲取登錄用戶
    Long userId = UserHolder.getUser().getId();
    //2. 獲取日期
    LocalDateTime now = LocalDateTime.now();
    //3. 拼接key
    String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
    String key = RedisConstants.USER_SIGN_KEY + userId + keySuffix;
    //4. 獲取今天是本月的第幾天
    int dayOfMonth = now.getDayOfMonth();
    //5. 獲取本月截至今天為止的所有的簽到記錄,返回的是一個十進制的數(shù)字 BITFIELD sign:5:202301 GET u3 0
    List<Long> result = stringRedisTemplate.opsForValue().bitField(
        key,
        BitFieldSubCommands.create()
        .get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));
    //沒有任務(wù)簽到結(jié)果
    if (result == null || result.isEmpty()) {
        return Result.ok(0);
    }
    Long num = result.get(0);
    if (num == null || num == 0) {
        return Result.ok(0);
    }
    //6. 循環(huán)遍歷
    int count = 0;
    while (true) {
        //6.1 讓這個數(shù)字與1 做與運算,得到數(shù)字的最后一個bit位 判斷這個數(shù)字是否為0
        if ((num & 1) == 0) {
            //如果為0,簽到結(jié)束
            break;
        } else {
            count ++;
        }
        num >>>= 1;
    }
    return Result.ok(count);
}

進行測試

圖片圖片

查看 Redis 變量

圖片圖片

從今天開始,往前查詢 連續(xù)簽到的天數(shù),結(jié)果為2 測試無誤!

四、關(guān)于使用bitmap來解決緩存穿透的方案

回顧緩存穿透:

發(fā)起了一個數(shù)據(jù)庫不存在的,redis里邊也不存在的數(shù)據(jù),通常你可以把他看成一個攻擊。

解決方案:

  • 判斷id<0
  • 數(shù)據(jù)庫為空的話,向redis里邊把這個空數(shù)據(jù)緩存起來

第一種解決方案:遇到的問題是如果用戶訪問的是id不存在的數(shù)據(jù),則此時就無法生效。

第二種解決方案:遇到的問題是:如果是不同的id那就可以防止下次過來直擊數(shù)據(jù)。

所以我們?nèi)绾谓鉀Q呢?

我們可以將數(shù)據(jù)庫的數(shù)據(jù),所對應(yīng)的id寫入到一個list集合中,當(dāng)用戶過來訪問的時候,我們直接去判斷l(xiāng)ist中是否包含當(dāng)前的要查詢的數(shù)據(jù),如果說用戶要查詢的id數(shù)據(jù)并不在list集合中,則直接返回,如果list中包含對應(yīng)查詢的id數(shù)據(jù),則說明不是一次緩存穿透數(shù)據(jù),則直接放行。

圖片圖片

現(xiàn)在的問題是這個主鍵其實并沒有那么短,而是很長的一個 主鍵。

哪怕你單獨去提取這個主鍵,但是在 11年左右,淘寶的商品總量就已經(jīng)超過10億個。

所以如果采用以上方案,這個list也會很大,所以我們可以使用bitmap來減少list的存儲空間。

我們可以把list數(shù)據(jù)抽象成一個非常大的bitmap,我們不再使用list,而是將db中的id數(shù)據(jù)利用哈希思想,比如:

id 求余bitmap長度 :id % bitmap.size = 算出當(dāng)前這個id對應(yīng)應(yīng)該落在bitmap的哪個索引上,然后將這個值從0變成1,然后當(dāng)用戶來查詢數(shù)據(jù)時,此時已經(jīng)沒有了list,讓用戶用他查詢的id去用相同的哈希算法, 算出來當(dāng)前這個id應(yīng)當(dāng)落在bitmap的哪一位,然后判斷這一位是0,還是1,如果是0則表明這一位上的數(shù)據(jù)一定不存在,采用這種方式來處理,需要重點考慮一個事情,就是誤差率,所謂的誤差率就是指當(dāng)發(fā)生哈希沖突的時候,產(chǎn)生的誤差。

圖片圖片

小結(jié)

以上就是對 微服務(wù) Spring Boot 整合 Redis BitMap 實現(xiàn) 簽到與統(tǒng)計 的簡單介紹,簽到功能是很常用的,在項目中,是一個不錯的亮點,統(tǒng)計功能也是各大系統(tǒng)中比較重要的功能,簽到完成后,去統(tǒng)計本月的連續(xù) 簽到記錄,來給予獎勵,可大大增加用戶對系統(tǒng)的活躍度 技術(shù)改變世界!!!

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-07-02 11:42:53

SpringRedis自定義

2024-03-27 07:55:58

SpringRedis海量

2020-02-11 16:10:44

Redis分布式鎖Java

2021-05-24 08:58:34

Redis Bitmap 數(shù)據(jù)統(tǒng)計

2025-09-08 09:14:31

SpringQuartz自動識別

2020-04-23 14:35:30

SpringBootRedis數(shù)據(jù)庫

2025-02-14 09:07:35

2025-10-31 07:37:48

2015-04-16 12:27:08

云之家

2025-05-20 09:00:04

SpringGeoHash派單

2025-07-22 03:15:00

SpringFlight零拷貝

2025-03-19 08:36:55

2025-03-26 08:43:17

2025-07-31 08:58:50

2024-03-25 08:32:57

灰度Bitmap平均值

2023-09-26 08:11:22

Spring配置MySQL

2011-05-10 17:32:36

NFC簽到FoursquareLBS

2023-02-14 07:47:20

SpringBootEhcache

2025-03-04 08:40:28

2025-06-17 08:39:43

點贊
收藏

51CTO技術(shù)棧公眾號

教室别恋欧美无删减版| 欧美精品videossex少妇| 久久九九电影| 日韩一区二区福利| 老熟女高潮一区二区三区| 欧美裸体视频| 最新日韩av在线| 国产欧美日韩一区| 中文字幕精品一区二区精| 欧美黄色免费| 亚洲天堂av在线免费| 捷克做爰xxxⅹ性视频| 两个人看的在线视频www| 国产精品久线观看视频| 国产精品日韩高清| 亚洲网站免费观看| 国产一区二区三区成人欧美日韩在线观看| 中日韩美女免费视频网站在线观看 | 色免费在线视频| 黄色小说在线播放| 国产精品欧美综合在线| 精品国产乱码久久久久久丨区2区| 中文字幕av网站| 亚洲国产第一| 欧美乱妇40p| 亚洲综合久久av一区二区三区| 久久动漫网址| 精品免费国产二区三区| 免费成人黄色大片| 免费污视频在线一区| 亚洲成人1区2区| wwwjizzjizzcom| 欧美成人视屏| 国产欧美va欧美不卡在线| 国产主播一区二区三区四区| 国产视频一区二区三| 青青草原综合久久大伊人精品优势| 97精品久久久中文字幕免费| www.超碰在线观看| 日韩欧美精品一区| 亚洲图中文字幕| 中文字幕国产综合| 日韩大片在线免费观看| 精品国产3级a| 香蕉视频免费网站| 亚洲精品国产九九九| 91精品国产手机| 日本在线播放一区二区| 国产精品麻豆成人av电影艾秋| 色婷婷精品大在线视频| 日韩精品视频一区二区在线观看| 超碰在线最新网址| 亚洲电影在线免费观看| 成人小视频在线观看免费| caopo在线| 亚洲精品视频在线| 999久久欧美人妻一区二区| av片在线观看| 一区二区免费在线播放| 日韩精品一区二区免费| 成人影音在线| 精品久久久久久久久国产字幕 | 丝袜美腿小色网| 在线电影一区二区| 欧美丰满老妇厨房牲生活 | 91久久国产最好的精华液| 日韩中文字幕免费在线| 高清av一区二区三区| 欧美色综合天天久久综合精品| xx欧美撒尿嘘撒尿xx| 日韩一区中文| 日韩精品一区二| 加勒比精品视频| 久久最新网址| xxxx性欧美| 精品视频一区二区在线观看| 一本久久综合| 国产成人在线视频| 91成人国产综合久久精品| 国产精品一区二区不卡| 国产精品视频免费一区二区三区 | 欧美成人精品一级| 亚洲成人av中文字幕| 欧美高清性xxxx| 日韩一区电影| 欧美激情精品在线| 在线视频一区二区三区四区| 蓝色福利精品导航| 国产精品免费视频一区二区| 欧美美乳在线| 亚洲欧美日韩久久| 欧美成人三级在线视频| aaaa欧美| 精品国产精品网麻豆系列| 公肉吊粗大爽色翁浪妇视频| 亚洲激情中文| 日韩av不卡电影| av中文在线观看| 久久久久久久久一| 国产在线观看欧美| 免费成人美女女| 精品日韩在线一区| 久久午夜精品视频| 亚洲国产一区二区精品专区| 国产精品女人网站| 天堂在线视频免费| 自拍偷在线精品自拍偷无码专区| 久久国产午夜精品理论片最新版本| 写真福利精品福利在线观看| 日韩欧美成人激情| 快灬快灬一下爽蜜桃在线观看| 欧美深夜福利| 国产美女精品免费电影| 日韩欧美亚洲系列| 亚洲福利视频一区| 色偷偷中文字幕| 欧美亚洲在线日韩| 欧美一区二区视频97| 国产超碰人人模人人爽人人添| 中文在线免费一区三区高中清不卡| av免费观看大全| 精品视频一二| 日韩中文字幕视频在线| 日韩免费av网站| 91亚洲国产成人精品一区二三| 99热都是精品| 久久91视频| 在线成人免费网站| 欧美精品一二三四区| av高清久久久| 欧美一级免费播放| 伊人精品综合| 欧美高清视频免费观看| 一道本无吗一区| 亚洲国产精华液网站w| 国产性xxxx18免费观看视频| 国产调教精品| 久久最新资源网| 一区二区三区午夜| 亚洲欧美怡红院| 99九九99九九九99九他书对| 大片网站久久| 国产精品视频网址| bbbbbbbbbbb在线视频| 色婷婷亚洲综合| 欧美多人猛交狂配| 久久午夜av| 日本欧美色综合网站免费| 天堂在线中文网官网| 精品视频久久久久久久| 欧美另类一区二区| 久久亚洲影视婷婷| 不卡影院一区二区| 免费精品国产| 国产精品久久久av| 欧美激情黑人| 日韩欧美在线影院| 五月天婷婷丁香| 99精品在线观看视频| 亚洲国产精品久久久久婷蜜芽| 亚洲人成网站77777在线观看| 国产成人亚洲综合| 在线免费观看黄色| 制服.丝袜.亚洲.另类.中文| 亚洲国产精品免费在线观看| 国产精品99久久久久久似苏梦涵| 激情六月天婷婷| 女人抽搐喷水高潮国产精品| 啪一啪鲁一鲁2019在线视频| 国产成人天天5g影院在线观看| 欧美性xxxxx极品少妇| 久久一级免费视频| 国产精品911| 中文字幕乱码人妻综合二区三区| 凹凸成人精品亚洲精品密奴| 91久久久久久久久久久| 成人免费一区二区三区牛牛| 亚洲欧美日韩中文视频| 亚洲一区二区人妻| 亚洲一区二区中文在线| 三叶草欧洲码在线| 美女www一区二区| 久久综合亚洲精品| 自拍欧美一区| 亚洲精品欧美日韩专区| xxx.xxx欧美| 中文字幕精品www乱入免费视频| 国产免费黄色录像| 懂色av影视一区二区三区| 国产精品无码无卡无需播放器| 国产精品一区二区黑丝 | 狠狠色丁香久久婷婷综合丁香| 国产 欧美 日韩 一区| 伊人久久大香线蕉综合网蜜芽| 国产乱人伦真实精品视频| 高清在线视频不卡| www.精品av.com| 青青草视频在线免费观看| 7777女厕盗摄久久久| 日本一区二区三区精品| 椎名由奈av一区二区三区| 内射中出日韩无国产剧情| 久久99精品国产麻豆不卡| 青青草成人免费在线视频| 手机在线一区二区三区| 久久久久欧美| 一区视频网站| 成人精品久久久| 成人性生活视频| 欧美精品成人91久久久久久久| yiren22亚洲综合伊人22| 精品成人a区在线观看| 国产又黄又大又粗的视频| 欧美丝袜一区二区三区| 欧美日韩精品亚洲精品| 中文字幕免费在线观看视频一区| av免费观看不卡| 国产在线精品一区二区| 黄色高清无遮挡| 国产欧美日韩一级| 国产精品国产三级国产专区51| 日本成人小视频| 欧美日本国产精品| 久久99国产精品久久99大师| 99电影在线观看| 高清一区二区中文字幕| 国产精品主播视频| 456成人影院在线观看| 97在线看福利| 啊啊啊久久久| 久久人91精品久久久久久不卡| huan性巨大欧美| 久热在线中文字幕色999舞| 免费在线看黄网站| 最近2019中文字幕在线高清| √新版天堂资源在线资源| 亚洲视频国产视频| 国产系列在线观看| 国产午夜精品美女视频明星a级| 青青青手机在线视频观看| 亚洲精品久久久久久久久| 日本波多野结衣在线| 欧美va天堂va视频va在线| 国产丰满果冻videossex| 欧美一区二区三区公司| 99久久久久成人国产免费 | 亚洲av片一区二区三区| 亚洲国产中文字幕在线观看| 天堂v在线观看| 日韩激情片免费| 欧美女优在线| 中文字幕视频在线免费欧美日韩综合在线看 | 亚洲狠狠爱一区二区三区| 国产无遮挡裸体免费视频| 亚洲成人7777| www.国产毛片| 欧美婷婷六月丁香综合色| 中文永久免费观看| 欧美日韩国产片| 国产偷人妻精品一区二区在线| 日韩一级免费观看| 亚洲精品97久久中文字幕| 精品va天堂亚洲国产| 深夜影院在线观看| 在线视频亚洲欧美| av大全在线| 欧美亚洲视频在线看网址| 成人免费av电影| 国产在线高清精品| 一区三区自拍| 欧美日韩在线高清| 欧美大黑bbbbbbbbb在线| 99视频精品全部免费看| 亚洲欧洲另类| 欧美婷婷精品激情| 国产成人综合亚洲网站| 日b视频在线观看| 国产精品视频一区二区三区不卡| 国产免费久久久久| 精品动漫一区二区| 伊人网综合在线| 欧美成人三级电影在线| 欧美视频综合| 久久亚洲国产精品成人av秋霞| 变态调教一区二区三区| 国产精品18久久久久久麻辣| 精品精品视频| 欧美日韩亚洲一区二区三区在线观看| 91亚洲国产| 波多野结衣之无限发射| 麻豆成人av在线| 色婷婷精品久久二区二区密| 国产精品麻豆欧美日韩ww| 国产无套在线观看| 欧美精品视频www在线观看| 天天av天天翘| 久久伊人精品视频| 澳门成人av网| 超碰97网站| 日韩精品永久网址| 国产极品粉嫩福利姬萌白酱| 久久99国产精品尤物| 日韩中文字幕电影| 夜夜精品浪潮av一区二区三区| 性高潮视频在线观看| 欧美精品一区二区三区蜜桃| 秋霞影院午夜丰满少妇在线视频| 97在线观看免费高清| 免费精品一区| 亚洲精品乱码久久久久久蜜桃91| 亚洲欧洲另类| www.欧美com| 中文字幕一区二区三中文字幕| 黄色一级片免费在线观看| 欧美videossexotv100| 永久免费av在线| 欧美一级大片在线观看| 国产精品白浆| 六月婷婷激情网| 麻豆精品一区二区三区| 亚欧洲乱码视频| 欧美日韩国产综合视频在线观看中文| 国产普通话bbwbbwbbw| 日韩视频在线免费观看| 人人视频精品| 久久青青草综合| 亚洲免费大片| 久久性爱视频网站| 一区二区三区在线观看视频| 91午夜交换视频| 色悠悠久久久久| 日韩制服诱惑| 亚洲精品国产精品国自产观看| 日韩中文字幕1| 精品人妻无码一区二区三区换脸 | 中文字幕制服诱惑| 亚洲视频视频在线| 性欧美1819sex性高清| 欧美日本亚洲| 日本午夜一区二区| 亚洲精品成人av久久| 欧美日韩国产影片| 免费av在线播放| 92看片淫黄大片看国产片| 中文字幕免费精品| 中文在线字幕观看| 五月天网站亚洲| 蜜桃视频在线观看网站| 国产盗摄xxxx视频xxx69| 欧美一区二区三区高清视频| 国产成人黄色网址| 中文字幕视频一区| www.成人在线观看| 性欧美办公室18xxxxhd| 免费成人网www| 日本xxxx黄色| 亚洲精品水蜜桃| 五月婷婷在线观看视频| 日本精品视频在线| 日韩成人综合| 91大神免费观看| 五月激情综合网| 成人欧美亚洲| 91美女片黄在线观| 国一区二区在线观看| 特级西西人体wwwww| 欧美亚洲综合色| 91国内在线| 久久香蕉综合色| 免费在线一区观看| 欧美成人精品激情在线视频| 亚洲精品电影在线| 91国内外精品自在线播放| 可以免费看的黄色网址| 成人黄色在线看| 中文资源在线播放| 久久成人亚洲精品| 亚洲人成亚洲精品| 性生生活大片免费看视频| 亚洲午夜在线视频| 电影av在线| 成人在线视频网址| 久久精品一区二区国产| 中文国语毛片高清视频| 欧美成人一区二区三区 | 国产日本欧美视频| 亚洲婷婷伊人| 青青草原播放器| 婷婷成人激情在线网| 久做在线视频免费观看| 超碰97在线资源| 免费高清不卡av| 国产小视频在线观看免费| 欧美videos中文字幕| 日韩不卡在线| 日本a在线免费观看| 国产精品色在线| 日韩一级片免费| 91影院在线免费观看视频| 日韩午夜在线电影|