欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis 8種基本數(shù)據(jù)類型及常用命令和數(shù)據(jù)類型的應(yīng)用場景小結(jié)

 更新時間:2024年03月06日 11:03:56   作者:師小師  
Redis是一種基于內(nèi)存操作的數(shù)據(jù)庫,其中多虧于高效的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了Redis 8種基本數(shù)據(jù)類型及常用命令和數(shù)據(jù)類型的應(yīng)用場景小結(jié),具有一定的參考價值,感興趣的可以了解一下

Redis 五大數(shù)據(jù)類型

redis 官方網(wǎng)張:https://redis.io/

redis 常用命令:https://www.redis.net.cn/order/

使用 SpringBoot。Jedis 連接的方法也是這些命令

key

# 驗證 redis 服務(wù)密碼
127.0.0.1:6379> auth 123456
# 查看 redis 節(jié)點信息
127.0.0.1:6379> info replication
# 測試是否連接 redis
127.0.0.1:6379> ping
# 查看所有的key
127.0.0.1:6379> keys * 
#關(guān)閉redis 
127.0.0.1:6379> shutdown
# 退出
127.0.0.1:6379> exit  
# 切換數(shù)據(jù)庫
127.0.0.1:6379> select 3
# 查看DB大小
127.0.0.1:6379> DBSIZE  
# 清除當(dāng)前數(shù)據(jù)庫
127.0.0.1:6379> flushdb
# 清除全部數(shù)據(jù)庫的內(nèi)容
127.0.0.1:6379> flushall
# 判斷當(dāng)前的key是否存在
127.0.0.1:6379> exists name
127.0.0.1:6379> set name
# 移動key到第一個數(shù)據(jù)庫
127.0.0.1:6379> move name 1
# 設(shè)置key的過期時間,單位是秒
127.0.0.1:6379> expite name 10
# 查看當(dāng)前 key 的剩余時間
127.0.0.1:6379> ttl name  
# 查看當(dāng)前key的一個類型
127.0.0.1:6379> type name

String

# 設(shè)置值
127.0.0.1:6379> set k1 v1  
# 獲取值
127.0.0.1:6379> get k1  
# 獲取所有的 key
127.0.0.1:6379> keys *
# 判斷一個 key 是否存在
127.0.0.1:6379> exists k1
# 獲取字符串的長度
127.0.0.1:6379> STRLEN key1
# 追加字符串,如果當(dāng)前 key 不存在,就相當(dāng)于set key
127.0.0.1:6379> APPEND k1 ",Hello"
# 初始瀏覽量為 0
127.0.0.1:6379> set views 0
# 自增1 瀏覽量變?yōu)?
127.0.0.1:6379> incr views
# 自減1  瀏覽量-1
127.0.0.1:6379> decr views
# 可以設(shè)置步長,指定增加10
127.0.0.1:6379> incrby views 10 
# 可以設(shè)置步長,指定減小10
127.0.0.1:6379> decrby views 10 
# 設(shè)置 k1 的值
127.0.0.1:6379> set k1 "hello,world"
# 截取字符串 [0,3]
127.0.0.1:6379> getrange k1 0 3
# 獲取全部的字符串和 get key 是一樣的
127.0.0.1:6379> getrange k1 0 -1
# 設(shè)置 k2 的值 "12345678"
127.0.0.1:6379> set k2 "12345678"
# 替換指定位置開始的字符串
127.0.0.1:6379> SETRANGE k2 1 xx

# setex (set with expire)  # 設(shè)置過期時間
# setnx (set if not exist)  # 不存在在設(shè)置 (在分布式鎖中會常常使用?。?
# 設(shè)置key3 的值為 hello,30秒后過期
127.0.0.1:6379> setex k3 30 "hello" 
# 查看 k3 過期時間
127.0.0.1:6379> ttl k3
# 如果 k3 不存在,創(chuàng)建 k3
127.0.0.1:6379> setnx k3 "haha"
# 清除當(dāng)前數(shù)據(jù)庫的所有 key
127.0.0.1:6379> flushdb
# 同時設(shè)置多個值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  
# 同時獲取多個值
127.0.0.1:6379> mget k1 k2 k3

# msetnx 是一個原子性的操作,要么一起成功,要么一起失敗 結(jié)果返回 0
127.0.0.1:6379> msetnx k1 v1 k4 v4

# 對象 set user:1 {name:zhangsan,age:3}  設(shè)置一個user:1 對象值為 json 字符來保存一個對象
# 這里的key是一個巧妙的設(shè)計: user:{id}:{filed} , 如此設(shè)計在Redis中是完全OK了
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
# 獲取對象中的值
127.0.0.1:6379> mget user:1:name user:1:age

# getset  先get然后在set
# 如果不存在值,則返回 nil
127.0.0.1:6379> getset db redis
# 如果存在值,獲取原來的值,并設(shè)置新的值
127.0.0.1:6379> getset db mongodb

String類似的使用場景:value 除了是字符串還可以是數(shù)字

  • 用戶token
  • 計數(shù)器
  • 統(tǒng)計多單位的數(shù)量
  • 粉絲數(shù)
  • 對象緩存存儲

List

基本的數(shù)據(jù)類型,列表,在redis里面,list 是一種比較靈活的鏈表數(shù)據(jù)結(jié)構(gòu),可以充當(dāng)棧、隊列、阻塞隊列

list 列表是鏈表型的數(shù)據(jù)結(jié)構(gòu),所以它的元素是有序的,而且列表內(nèi)的元素是可以重復(fù)的。意味著它可以根據(jù)鏈表的下標(biāo)獲取指定的元素和某個范圍內(nèi)的元素集。

# 將一個值或者多個值,插入到列表頭部 (左)
127.0.0.1:6379> lpush list one
127.0.0.1:6379> lpush list one two three
# 獲取 list 中的所有值
127.0.0.1:6379> lpush list 0 -1
# 通過區(qū)間獲取具體的值
127.0.0.1:6379> lrange lisr 0 1
# 將一個值或者多個值,插入到列表位部 (右)
127.0.0.1:6379> rpush list righr

# 通過下標(biāo)獲得 list 中的某一個值
127.0.0.1:6379> lindex list 1
# 返回 list 列表的長度
127.0.0.1:6379> llen list

# 移除list的第一個元素
127.0.0.1:6379> lpop list
# 移除list的最后一個元素
127.0.0.1:6379> rpop list  
# 移除list集合中指定個數(shù)的value,精確匹配
127.0.0.1:6379> lrem list 1 one 


# trim 修剪 
# 新建一個 newlist 集合
127.0.0.1:6379> lpush newlist "hello" "hello1" "hello2" "hello3" "hello4"
# 通過下標(biāo)截取指定的長度,這個list已經(jīng)被改變了,截斷了只剩下截取的元素
127.0.0.1:6379> ltrim newlist 1 2

# rpoplpush 移除列表的最后一個元素,將他移動到新的列表中
127.0.0.1:6379> rpush newlist "hello1"
# 移除列表的最后一個元素,將他移動到新的列表中
127.0.0.1:6379> rpoplpush another anotherlist
# 查看目標(biāo)列表中,確實存在改值
127.0.0.1:6379> lrange anotherlist 0 -1 

# lset 將列表中指定下標(biāo)的值替換為另外一個值,更新操作
127.0.0.1:6379> exists list
# 如果不存在列表更新機會報錯,更新前先檢查列表是否存在(0表示下表索引)
127.0.0.1:6379> lset list 0 item
# 如果下標(biāo)不存在,則會報錯
127.0.0.1:6379> lset list 10 other

# linsert 將某個具體的 value 插入到列表中某個元素的前面或者后面
127.0.0.1:6379> rpush list "hello"
127.0.0.1:6379> rpush list "world"
# 把 other 添加到 world 前面
127.0.0.1:6379> linsert list before "world" "other"
# 把 another 添加到 world 后面
127.0.0.1:6379> linsert list after "world" "another"

List 是一個鏈表,before , after , left,right 都可以插入值,在兩邊插入或者改動值,效率最高! 中間元素,相對來說效率會低一點

使用場景:

  • 消息隊列
  • 排行榜
  • 最新列表

Set

Sets: 不重復(fù)且無序的字符串元素的集合。

set 類型是 string 類型的集合,其特點是集合元素?zé)o序且不重復(fù),每個集合最多可以存儲 232 - 1 個元素(40多億)

所有的 set 命令都是 s 開始

# 清空當(dāng)前數(shù)據(jù)庫
127.0.0.1:6379> flushdb
# set 集合中添加幾個值
127.0.0.1:6379> sadd myset "1"
127.0.0.1:6379> sadd myset "1" "2" "3" "4" "5" "6" "7" "8" "9" "0"
# 查看指定 set 的所有值
127.0.0.1:6379> smembers myset
# 判斷某一個值是不是在 set 集合中
127.0.0.1:6379> sismember myset

# 獲取 set 集合中的內(nèi)容元素個數(shù)
127.0.0.1:6379> scard myset
# 移除 set 集合中的指定元素
127.0.0.1:6379> srem myset 3

# 隨機抽選出一個元素,set 無序不重復(fù)集合。抽隨機
127.0.0.1:6379> srandmember myset
# 隨機抽取2個
127.0.0.1:6379> srandmember myset 2

# 隨機刪除 myset 中的值
127.0.0.1:6379> spop myset

# 將一個指定的值,移動到另外一個set集合
127.0.0.1:6379> sadd "hello"
127.0.0.1:6379> sadd "world"
127.0.0.1:6379> smove myset newset "hello"

# 數(shù)字集合類 - 差集 sdiff - 交集 sinter - 并集 sunion
127.0.0.1:6379> sadd key1 "a" "b" "c"
127.0.0.1:6379> sadd key2 "c" "e" "f"
# 差集—— key1 在 key2 中沒有的值
127.0.0.1:6379> sdiff key1 key2
# 交集—— key1 和 key2 共同擁有的值
127.0.0.1:6379> sinter key1 key2
# 并集—— key1 和 key2 所有的值
127.0.0.1:6379> sunion key1 key2

Set使用場景:

  • 共同關(guān)注,共同愛好,推薦好友,共同好友,共同喜好,二度好友,共同粉絲,微信點贊同好友可看,感興趣的人集合
  • 興趣標(biāo)簽,相同愛好的為一個標(biāo)簽
  • 統(tǒng)計網(wǎng)站的獨立IP。利用set集合當(dāng)中元素不唯一性,可以快速實時統(tǒng)計訪問網(wǎng)站的獨立IP。
  • 安全提示,群聊拉人的時候,新人入群的提示,如果被拉進群聊的新人除了拉取人之外,和其他群友都不是好友關(guān)系或者跟不超過N個人是好友關(guān)系的時候,就可以給一個安全提示。此時用到的是SISMEMBER

Hash

Map集合,key-maps 時候這個值是一個map集合! 本質(zhì)和String類型沒有太大區(qū)別,還是一個簡單的key-vlaue!

有點像 HashMap 的 value 又套了個HashMap

所有 hash 的命令都是 h 開頭

# set一個具體 key-vlaue
127.0.0.1:6379> hset myhash field "hello
# 獲取一個字段值
127.0.0.1:6379> hget myhash field
# set 多個 key-vlaue 返回 OK
127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"
# set 多個 key-vlaue 返回成功的數(shù)量
127.0.0.1:6379> hset myhash field3 "hello" field4 "world"
# 獲取多個字段值
127.0.0.1:6379> hmget myhash field1 field2
# 獲取全部的數(shù)據(jù)
127.0.0.1:6379> hgetall myhash

# 獲取hash表的字段數(shù)量
127.0.0.1:6379> hlen myhash
# 判斷hash中指定字段是否存在
127.0.0.1:6379> hexists myhash field1

# 只獲得所有 field
127.0.0.1:6379> hkeys myhash
# 只獲得所有value
127.0.0.1:6379> hvals myhash

# 指定增量
127.0.0.1:6379> hset myhash field5 5
127.0.0.1:6379> hincrby myhash field5 5
127.0.0.1:6379> hincrby myhash field5 -2

# 如果不存在則可以設(shè)置,存在則不能設(shè)置
127.0.0.1:6379> hsetnx myhash field6 "hello"
# 刪除指定的 field
127.0.0.1:6379>hdel myhash field

# 返回 hash 指定 field 的 value 的字符串長度,field 不存在返回 0
127.0.0.1:6379> hstrlen myhash field1

hash變更的數(shù)據(jù) user name age,尤其是是用戶信息之類的,經(jīng)常變動的信息! hash 更適合于對象的存儲,String更加適合字符串存儲

購物車的實現(xiàn):field (商品id),hincrby (商品數(shù)量,添加增量會返回總數(shù)),hdel(刪除),hgetall(全選),hlen(購物車車數(shù)量),key(用戶id)

Hash 結(jié)構(gòu)優(yōu)點:

  • 同類數(shù)據(jù)歸類整合存儲,方便數(shù)據(jù)管理
  • 相比 String 操作消耗內(nèi)存與 cpu 更小
  • 相比 String 儲存更節(jié)省空間

缺點:

  • 過期功能不能使用在 field 上,只能用在 key 上
  • Redis 集群架構(gòu)下不適合大規(guī)模使用

Sorted Set

Sorted-Set和Set類型極為相似,它們都是字符串的集合,都不允許重復(fù)的成員出現(xiàn)在一個Set中。它們之間的主要差別是Sorted-Set中的每一個成員都會有一個分數(shù)(score)與之關(guān)聯(lián),Redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。然而需要額外指出的是,盡管Sorted-Set中的成員必須是唯一的,但是分數(shù)(score)卻是可以重復(fù)的

在set的基礎(chǔ)上,增加了一個值,set k1 v1 zset k1 score1 v1

# 添加一個值
127.0.0.1:6379> zadd myzset 1 one 
# 添加多個值
127.0.0.1:6379> zadd myzset 2 two 3 three
# zincrby 和 zadd 效果一樣,最后返回結(jié)果是字符串,zadd 返回添加總數(shù)

# 查看添加的值
127.0.0.1:6379> zrange myzset 0 -1
127.0.0.1:6379> zrange myzset 0 -1 withscores

# 實現(xiàn)排序 添加三個用戶
127.0.0.1:6379>	zadd salary 120 zhang 98 wang 110 li
# ZRANGEBYSCORE key min max   顯示全部的用戶 從小到大
127.0.0.1:6379>	zrangebyscore salary -inf +inf
# 從大到進行排序
127.0.0.1:6379>	zrevrange salary 0 -1
# 顯示全部的用戶并且附帶成績
127.0.0.1:6379>	zrangebyscore salary -inf +inf withscores
# 顯示成績小于 110 的所有人,升序排序
127.0.0.1:6379>	zrangebyscore salary -inf 110 withscores
# zrem 移除,移除有序集合中的指定元素
127.0.0.1:6379> zrem salary zhang

# 添加值
127.0.0.1:6379> zadd myzset 2 hello 3 world
# 有序集合的元素個數(shù), key 不存在則返回0 
127.0.0.1:6379> zcard myzset
# 獲取區(qū)間成員數(shù)量
127.0.0.1:6379> zcount myzset 1 3
# 計算成員之間的數(shù)量
127.0.0.1:6379> zlexcount myzset - +
127.0.0.1:6379> zlexcount myzset [b [f

# 刪除一個 zset -> del myzset
127.0.0.1:6379> del myzset

ZSet 數(shù)據(jù)類型使用場景:游戲排名、微博熱點話題,根據(jù)時間排序的新聞列表, 閱讀排行榜,延時隊列等

限流,滑動窗口是限流常見的一種策略。如果我們把一個用戶的 ID 作為 key 來定義一個 zset ,member 或者 score 可以都為訪問時的時間戳。我們只需統(tǒng)計某個 key 下在指定時間戳區(qū)間內(nèi)的個數(shù),就能得到這個用戶滑動窗口內(nèi)訪問頻次,與最大通過次數(shù)比較,來決定是否允許通過。

三種特殊類型

Geospatial 地理位置

將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的key中。這些數(shù)據(jù)將會存儲到sorted set這樣的目的是為了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令對數(shù)據(jù)進行半徑查詢等操作

常用命令:

命令描述
Redis GEOHASH 命令返回一個或多個位置元素的 Geohash 表示
Redis GEOPOS 命令從key里返回所有給定位置元素的位置(經(jīng)度和緯度)
Redis GEODIST 命令返回兩個給定位置之間的距離
Redis GEORADIUS 命令以給定的經(jīng)緯度為中心, 找出某一半徑內(nèi)的元素
Redis GEOADD 命令將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的key中
Redis GEORADIUSBYMEMBER 命令找出位于指定范圍內(nèi)的元素,中心點是由給定的位置元素決定

使用場景:

例如:微信位置共享,附近的人等地圖功能

redis 127.0.0.1:6379>  GEOADD Sicily 13.361389 38.115556 "beijing" 15.087269 37.502669 "shanghai"
(integer) 2
redis 127.0.0.1:6379>  GEODIST Sicily beijing shanghai
"166274.15156960039"
redis 127.0.0.1:6379>  GEORADIUS Sicily 15 37 100 km
1) "shanghai"
redis 127.0.0.1:6379>  GEORADIUS Sicily 15 37 200 km
1) "beijing"
2) "shanghai"

Hyperloglog

使用場景:

統(tǒng)計注冊的IP數(shù),每日訪問數(shù),每天在線人數(shù),搜索詞條數(shù)等類似場景

命令描述
Redis Pgmerge 命令將多個 HyperLogLog 合并為一個 HyperLogLog
Redis Pfadd 命令添加指定元素到 HyperLogLog 中。
Redis Pfcount 命令返回給定 HyperLogLog 的基數(shù)估算值。

示例1:

redis 127.0.0.1:6379> PFADD mykey a b c d e f g h i j
(integer) 1
redis 127.0.0.1:6379> PFCOUNT mykey
(integer) 10

示例2:

redis 127.0.0.1:6379> PFADD hll1 foo bar zap a
(integer) 1
redis 127.0.0.1:6379> PFADD hll2 a b c foo
(integer) 1
redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2
OK
redis 127.0.0.1:6379> PFCOUNT hll3
(integer) 6

Bitmap

使用場景:

統(tǒng)計用戶信息、活躍、不活躍、 登錄 、 未登錄、打卡、365打卡! 兩個狀態(tài)的,都可以使用 Bitmaps!

Bitmap 位圖,數(shù)據(jù)結(jié)構(gòu),都是操作二進制位來進行記錄,就只有0 和 1 兩個狀態(tài)!

365 天 = 365 bit 1字節(jié) = 8bit 46 個字節(jié)左右!

# 使用 bitmap 記錄周一到周日打卡
127.0.0.1:6379> setbit sign 0 1
127.0.0.1:6379> setbit sign 1 1
127.0.0.1:6379> setbit sign 2 1
127.0.0.1:6379> setbit sign 3 0
127.0.0.1:6379> setbit sign 4 1
127.0.0.1:6379> setbit sign 5 1
127.0.0.1:6379> setbit sign 6 1
# 查看那一天是否打卡
127.0.0.1:6379> getbit sign 3
127.0.0.1:6379> getbit sign 4

# 統(tǒng)計這周的打卡記錄,就可以看到是否有全勤
127.0.0.1:6379> bitcount sign

到此這篇關(guān)于Redis 8種基本數(shù)據(jù)類型及常用命令和數(shù)據(jù)類型的應(yīng)用場景小結(jié)的文章就介紹到這了,更多相關(guān)Redis 基本數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解

    Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解

    這篇文章主要為大家介紹了Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Redis5之后版本的高可用集群搭建的實現(xiàn)

    Redis5之后版本的高可用集群搭建的實現(xiàn)

    這篇文章主要介紹了Redis5之后版本的高可用集群搭建的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Windows安裝Redis并添加本地自啟動服務(wù)的實例詳解

    Windows安裝Redis并添加本地自啟動服務(wù)的實例詳解

    這篇文章主要介紹了Windows安裝Redis并添加本地自啟動服務(wù)的實例詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 如何解決Redis緩存穿透(緩存空對象、布隆過濾器)

    如何解決Redis緩存穿透(緩存空對象、布隆過濾器)

    緩存穿透是一個常見的問題,它發(fā)生當(dāng)請求的數(shù)據(jù)既不在緩存中也不在數(shù)據(jù)庫中,文章通過一個查詢商品店鋪的案例,展示了如何結(jié)合這兩種方法來避免緩存穿透,首先利用布隆過濾器過濾掉不存在的id,對于誤判的情況,則采用緩存空對象的策略進行補救
    2024-11-11
  • k8s部署redis遠程連接的項目實踐

    k8s部署redis遠程連接的項目實踐

    本文主要介紹了k8s部署redis遠程連接的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 淺談Redis如何應(yīng)對并發(fā)訪問

    淺談Redis如何應(yīng)對并發(fā)訪問

    本文主要介紹了Redis如何應(yīng)對并發(fā)訪問,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 用Lua腳本實現(xiàn)Redis原子操作的示例

    用Lua腳本實現(xiàn)Redis原子操作的示例

    本文主要介紹了用Lua腳本實現(xiàn)Redis原子操作的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Redis如何使用zset處理排行榜和計數(shù)問題

    Redis如何使用zset處理排行榜和計數(shù)問題

    Redis的ZSET數(shù)據(jù)結(jié)構(gòu)非常適合處理排行榜和計數(shù)問題,它可以在高并發(fā)的點贊業(yè)務(wù)中高效地管理點贊的排名,并且由于ZSET的排序特性,可以輕松實現(xiàn)根據(jù)點贊數(shù)實時排序的功能
    2025-02-02
  • Redis中pipeline(管道)的實現(xiàn)示例

    Redis中pipeline(管道)的實現(xiàn)示例

    Redis管道(Pipeline)技術(shù)是一種提高數(shù)據(jù)處理效率的機制,允許客戶端通過一次網(wǎng)絡(luò)往返(RTT)發(fā)送多個命令到服務(wù)端,并一次性接收所有響應(yīng),本文就來實現(xiàn)管道,感興趣的可以了解一下
    2024-10-10
  • 利用Redis實現(xiàn)訪問次數(shù)限流的方法詳解

    利用Redis實現(xiàn)訪問次數(shù)限流的方法詳解

    這篇文章主要給大家介紹了關(guān)于如何利用Redis實現(xiàn)訪問次數(shù)限流的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02

最新評論