自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis 的五種基本數(shù)據(jù)類(lèi)型和使用場(chǎng)景

數(shù)據(jù)庫(kù) Redis
由于是單線(xiàn)程,所以Redis的命令執(zhí)行是串行而不是并行的,意味著同一時(shí)間內(nèi)redis只會(huì)執(zhí)行一個(gè)命令。

一、redis的特性:?jiǎn)尉€(xiàn)程

由于是單線(xiàn)程,所以redis的命令執(zhí)行是串行而不是并行的,意味著同一時(shí)間內(nèi)redis只會(huì)執(zhí)行一個(gè)命令。

由于一次只能執(zhí)行一條命令,所以要拒絕長(zhǎng)命令(就是運(yùn)行時(shí)間長(zhǎng)的命令),因?yàn)闀?huì)引起后面的命令阻塞。長(zhǎng)命令如:keys,flushall,flushdb,mutil/exec等。

單線(xiàn)程為什么這么快:因?yàn)閞edis是純內(nèi)純操作。

注意,這里的說(shuō)redis單線(xiàn)程只是指redis執(zhí)行讀寫(xiě)命令的時(shí)候是單線(xiàn)程。

redis在接收和處理讀寫(xiě)請(qǐng)求的時(shí)候雖然使用的是單線(xiàn)程,但redis采用了多路復(fù)用技術(shù)來(lái)處理網(wǎng)絡(luò)IO(即用戶(hù)的讀寫(xiě)請(qǐng)求),通過(guò)其內(nèi)置的eventloop事件循環(huán)機(jī)制監(jiān)聽(tīng)多個(gè)讀寫(xiě)事件,從而使得讀寫(xiě)請(qǐng)求在單線(xiàn)程下也能并發(fā)執(zhí)行。

而后來(lái)為了能夠處理更高QPS的請(qǐng)求,redis6.0版本之后開(kāi)始使用多線(xiàn)程接收和處理用戶(hù)的網(wǎng)絡(luò)IO請(qǐng)求,每個(gè)線(xiàn)程再使用多路復(fù)用技術(shù),能夠極高的提升網(wǎng)絡(luò)IO的效率(對(duì)于redis而言,CPU和內(nèi)存IO不是其瓶頸,網(wǎng)絡(luò)IO才是)。不過(guò)在執(zhí)行讀寫(xiě)操作依舊是單線(xiàn)程處理。

二、redis的五種數(shù)據(jù)結(jié)構(gòu)

1.字符串類(lèi)型

字符串的key是字符串,value可以是字符串,數(shù)字,二進(jìn)制,json,但本質(zhì)上value也還是字符串。

單個(gè)value大小不能超過(guò)512M,但實(shí)際應(yīng)用中一般不會(huì)存超過(guò)100K的內(nèi)容。

字符串類(lèi)型的使用場(chǎng)景:

  • 緩存
  • 計(jì)數(shù)器
  • 分布式鎖
  • 等等

常用命令:

get/set/del
incr/decr/incrby/decrby

關(guān)于 set setnx setxx 的區(qū)別
set 不管key是否存在都設(shè)置
setnx key不存在才設(shè)置,相當(dāng)于新增
set key value xx key存在才設(shè)置,相當(dāng)于修改

實(shí)戰(zhàn)場(chǎng)景1:記錄每一個(gè)用戶(hù)的訪(fǎng)問(wèn)次數(shù),或者記錄每一個(gè)商品的瀏覽次數(shù)。

方案:

  • 鍵名: userid:pageview 或者 pageview:userid 如pageview:5
  • 使用命令:incr

使用理由:每一個(gè)用戶(hù)訪(fǎng)問(wèn)次數(shù)或者商品瀏覽次數(shù)的修改是很頻繁的,如果使用mysql這種文件系統(tǒng)頻繁修改會(huì)造成mysql壓力,效率也低。而使用redis的好處有二:使用內(nèi)存,很快;單線(xiàn)程,所以無(wú)競(jìng)爭(zhēng),數(shù)據(jù)不會(huì)被改亂

實(shí)戰(zhàn)場(chǎng)景2:緩存頻繁讀取,但是不常修改的信息,如用戶(hù)信息,視頻信息

方案:業(yè)務(wù)邏輯上:先從redis讀取,有就從redis讀?。粵](méi)有則從mysql讀取,并寫(xiě)一份到redis中作為緩存,注意要設(shè)置過(guò)期時(shí)間。

鍵值設(shè)計(jì)上:一種是直接將用戶(hù)一條mysql記錄做序列化(serialize或json_encode)作為值,userInfo:userid 作為鍵名如:userInfo:1

另一種是以 表名:主鍵名:字段名:id值 作為鍵,字段值作為值。如 user:id:name:1 = "zbp"    

實(shí)戰(zhàn)場(chǎng)景3:分布式id生成器incr id

例如,mysql做了分布式,數(shù)據(jù)分?jǐn)偟矫恳粋€(gè)mysql服務(wù)器,在插入數(shù)據(jù)時(shí),每一個(gè)mysql服務(wù)器的id要自增但卻不能相同。此時(shí)可以使用redis的incr來(lái)完成。原因是,redis是單線(xiàn)程,意味并發(fā)請(qǐng)求生成id時(shí),生成的id不會(huì)重復(fù)。(單線(xiàn)程無(wú)競(jìng)爭(zhēng))

實(shí)戰(zhàn)場(chǎng)景4:限定某個(gè)ip特定時(shí)間內(nèi)的訪(fǎng)問(wèn)次數(shù)使用 incr + setex

例如限定某ip在10秒內(nèi)訪(fǎng)問(wèn)api的次數(shù)不能超過(guò)1000次

<?php

$r=new Redis();
$r->connect($RedisHost,$RedisPort);
$redis_key = "arts_api|".$_SERVER["REMOTE_ADDR"];

if(!$r->exists($redis_key)){
  $r->setex($redis_key,10,"1");
}else{
  $r->incr($redis_key);
 
  //判斷是否超過(guò)規(guī)定次數(shù)
  if($r->get($redis_key)>1000){
    die("訪(fǎng)問(wèn)過(guò)快");
  }
 
}

?>

實(shí)戰(zhàn)場(chǎng)景5:分布式session

我們知道,session是以文件的形式保存在服務(wù)器中的; 如果你的應(yīng)用做了負(fù)載均衡,將網(wǎng)站的項(xiàng)目放在多個(gè)服務(wù)器上,當(dāng)用戶(hù)在服務(wù)器A上進(jìn)行登陸,session文件會(huì)寫(xiě)在A服務(wù)器;當(dāng)用戶(hù)跳轉(zhuǎn)頁(yè)面時(shí),請(qǐng)求被分配到B服務(wù)器上的時(shí)候,就找不到這個(gè)session文件,用戶(hù)就要重新登陸

如果想要多個(gè)服務(wù)器共享一個(gè)session,可以將session存放在redis中,redis可以獨(dú)立與所有負(fù)載均衡服務(wù)器,也可以放在其中一臺(tái)負(fù)載均衡服務(wù)器上;但是所有應(yīng)用所在的服務(wù)器連接的都是同一個(gè)redis服務(wù)器。

實(shí)現(xiàn)如下,以PHP為例:

設(shè)置php.ini 文件中的session.save_handle 和session.save_path

session.save_handler = Redis
session.save_path =  "tcp://47.94.203.119:6379"     # 大部分情況下,使用的都是遠(yuǎn)程redis,因?yàn)閞edis要為多個(gè)應(yīng)用服務(wù)

如果為redis已經(jīng)添加了auth權(quán)限(requirpass),session.save_path項(xiàng)則應(yīng)該這樣寫(xiě)

session.save_path =  "tcp://47.94.203.119:6379?persistent=1&database=10&auth=myredisG506"

使用redis存儲(chǔ)session信息:

/**
 * 將session存儲(chǔ)在redis中
 */
session_start();
echo session_id();
echo "<br>";
$_SESSION['age'] = 26;
$_SESSION['name'] = 'xiaobudiu';
$_SESSION['sex'] = 'man';
var_dump($_SESSION);

此時(shí)session_id依舊存在cookie中。

redis中的key為 PHPREDIS_SESSION:session_id。

當(dāng)用戶(hù)跳轉(zhuǎn)頁(yè)面的時(shí)候,php內(nèi)部會(huì)先根據(jù)session_id()獲取cookie的session_id,再根據(jù)session_id獲取到redis中的key再根據(jù)key獲取value。

所以redis的session是通過(guò)cookie中的session_id得知 調(diào)用$_SESSION['name']是要獲取張三的用戶(hù)名而不是李四的用戶(hù)名。

如果關(guān)閉瀏覽器,cookie會(huì)失效,再打開(kāi)瀏覽器的時(shí)候,session_id就不見(jiàn)了; 這個(gè)時(shí)候,雖然redis還保存這張三的session。

但是php已經(jīng)無(wú)法獲取到這個(gè)session。

所以張三再登陸的時(shí)候,會(huì)重新生成一個(gè)session。此時(shí)張三的session會(huì)有兩個(gè),一個(gè)是正在使用的,一個(gè)是已經(jīng)失效的。失效的session不會(huì)一直放在redis中占用內(nèi)存,php自動(dòng)給這個(gè)redis的可以設(shè)置了過(guò)期時(shí)間。你也可以給session手動(dòng)設(shè)置過(guò)期時(shí)間,通過(guò)ini_set('session.gc_maxlifetime',$lifetime)。(如果是文件的形式存儲(chǔ)的session,php會(huì)定時(shí)清理失效的session文件,失效的session就是在瀏覽器cookie中找不到session_id的session)

我們可以封裝一個(gè)session類(lèi),這個(gè)session類(lèi)在原基礎(chǔ)上多了可以對(duì)session中的某個(gè)屬性設(shè)置過(guò)期時(shí)間

封裝session類(lèi):

class Session
{

  function __construct($lifetime = 3600)
{
    //初始化設(shè)置session會(huì)話(huà)存活時(shí)間,如果redis中的key存在超過(guò)3600秒,會(huì)自動(dòng)執(zhí)行session_destory(),具體表現(xiàn)為key被刪除
    ini_set('session.gc_maxlifetime',$lifetime);
  }

  /**
  * 設(shè)置當(dāng)前會(huì)話(huà)session的key-value
  * @param String $name  session name
  * @param Mixed $data  session data
  * @param Int  $expire 有效時(shí)間(秒)
  */
  function set($name, $data, $expire = 600)  # session中的單獨(dú)的某個(gè)鍵也可以設(shè)置過(guò)期時(shí)間,很靈活
{
    $session_data = array();
    $session_data['data'] = $data;
    $session_data['expire'] = time()+$expire;
    $_SESSION[$name] = $session_data;
  }

  /**
  * 讀取當(dāng)前會(huì)話(huà)session中的key-value
  * @param String $name session name
  * @return Mixed
  */
  function get($name)
{
    if(isset($_SESSION[$name])) {
      if($_SESSION[$name]['expire'] > time()) {
        return $_SESSION[$name]['data'];
      }else{
        self::clear($name);
      }
    }
    return false;
  }

  /**
  * 清除當(dāng)前session會(huì)話(huà)中的某一key-value
  * @param String $name session name
  */
  function clear($name)
{
    unset($_SESSION[$name]);
  }

  /**
  * 刪除當(dāng)前session_id對(duì)應(yīng)的session文件(清空當(dāng)前session會(huì)話(huà)存儲(chǔ),在redis中的表現(xiàn)為刪掉一個(gè)session的key,在文件形式session中表現(xiàn)為刪除一個(gè)session文件)
  */
  function destroy()
{
    session_destroy();
  }

}

在一個(gè)會(huì)話(huà)生命周期中,一個(gè)redis的key存著這個(gè)會(huì)話(huà)的$_SESSION所有信息包括 $_SESSION['name'],["age"]等。

redis存session比文件存session的優(yōu)勢(shì)在: 前者可以做分布式session,后者不行;前者是純內(nèi)存操作,更快,后者是文件IO操作。

我們可以看一下一個(gè)key里面的內(nèi)容:

get PHPREDIS_SESSION:6mmndoqm87st2s75ntlsvbp25q

得到:

"name|a:2:{s:4:\"data\";s:3:\"zbp\";s:6:\"expire\";i:1584351986;}age|a:2:{s:4:\"data\";i:18;s:6:\"expire\";i:1584351986;}job|a:2:{s:4:\"data\";s:10:\"programmer\";s:6:\"expire\";i:1584351986;}"

是一堆序列化的內(nèi)容。所以這種方式相比于使用hash結(jié)構(gòu)來(lái)存的效率更低。

因?yàn)檫@種方式取其中一個(gè)字段name就要將整個(gè)key獲取出來(lái),而且序列化和反序列化也要消耗性能。

題外話(huà):在網(wǎng)站分布多臺(tái)機(jī)器的時(shí)候,要做session分布式才可以跨機(jī)器獲取session; 如果我們不用session,改用純cookie代替session,將用戶(hù)信息都存到cookie中,這樣無(wú)論用戶(hù)訪(fǎng)問(wèn)到哪臺(tái)機(jī)器都無(wú)所謂,反正都可以在瀏覽器中獲取用戶(hù)信息。

但是這真的是一種很好的解決分布式session的方式嗎?

本人有時(shí)候也會(huì)做做爬蟲(chóng),知道有些頁(yè)面必須登陸后才能訪(fǎng)問(wèn),如果將用戶(hù)信息存在cookie,爬蟲(chóng)完全可以偽造一份用戶(hù)的cookie來(lái)訪(fǎng)問(wèn)用戶(hù)的隱私頁(yè)面。所以使用cookie會(huì)帶來(lái)這樣的安全問(wèn)題。

或者你的cookie是在瀏覽器可視的,而使用session,只有session_id在瀏覽器是可視的,用戶(hù)具體信息在服務(wù)端中你是看不到的。

mget/mset 批量操作:

n次get命令花費(fèi)的時(shí)間 = n次網(wǎng)絡(luò)時(shí)間+n次命令時(shí)間

一次mget命令獲取n個(gè)key的時(shí)間 = 1次網(wǎng)絡(luò)時(shí)間+n次命令時(shí)間 尤其是客戶(hù)端(php/Python)和redis服務(wù)端不在同一主機(jī)上,網(wǎng)絡(luò)時(shí)間就會(huì)比較長(zhǎng)。

所以盡量用mget,但是mget不要獲取太多key,否則要傳輸?shù)臄?shù)據(jù)過(guò)大對(duì)網(wǎng)絡(luò)開(kāi)銷(xiāo)和性能都有負(fù)擔(dān)。 

2. 哈希類(lèi)型

相關(guān)命令如下:

hget/hset/hdel/hgetall
hexists/hlen
hmget/hmset

實(shí)戰(zhàn)場(chǎng)景1:記錄每一個(gè)用戶(hù)的訪(fǎng)問(wèn)次數(shù)

方案: 

鍵名: user:1:info  

字段名:pageview

使用命令:hincrby

和單純使用字符串類(lèi)型進(jìn)行記錄不同,這里可以將用戶(hù)訪(fǎng)問(wèn)次數(shù)也放到用戶(hù)信息中作為一個(gè)整體,user:1:info中還存儲(chǔ)著name,email,age之類(lèi)的信息

hgetall/hvals/hkeys

PS:慎用hgetall,因?yàn)閔getall會(huì)獲取一個(gè)hash key中的所有字段,這是一個(gè)長(zhǎng)命令,而redis是單線(xiàn)程,會(huì)阻塞住后面的命令的執(zhí)行。

字符串和哈希類(lèi)型對(duì)比:這里我們以“將一個(gè)用戶(hù)的信息存為redis字符串和哈?!白鳛楸葘?duì)。

字符串存儲(chǔ)方式:

  • 方案1: 鍵名 user:1:info  值 序列化后的用戶(hù)對(duì)象
  • 方案2: 鍵名 user:1:字段名   值 字段值

哈希存儲(chǔ)方式:

方案3: 鍵名 user:1:info  值 用戶(hù)數(shù)據(jù)

方案1的優(yōu)點(diǎn)是設(shè)計(jì)簡(jiǎn)單,可節(jié)省內(nèi)存(相對(duì)于方案2),缺點(diǎn)一是如果要修改用戶(hù)對(duì)象中的某個(gè)屬性要將整個(gè)用戶(hù)對(duì)象從redis中取出來(lái),二是要對(duì)數(shù)據(jù)進(jìn)行序列化和反序列化也會(huì)產(chǎn)生一定CPU開(kāi)銷(xiāo)。

方案2的優(yōu)點(diǎn)是可以單獨(dú)更新用戶(hù)的屬性,無(wú)需將這個(gè)用戶(hù)所有屬性取出。

缺點(diǎn)一是單個(gè)用戶(hù)的數(shù)據(jù)是分散的不利于管理,二是占用內(nèi)存,方案1一個(gè)用戶(hù)的數(shù)據(jù)用一個(gè)key就可以保存,方案2一個(gè)用戶(hù)的數(shù)據(jù)要多個(gè)key才可以保存。

方案3的優(yōu)點(diǎn):直觀,節(jié)省空間,可以單獨(dú)更新hash中的某個(gè)屬性缺點(diǎn):ttl不好控制

3.列表類(lèi)型

列表本質(zhì)是一個(gè)有序的,元素可重復(fù)的隊(duì)列

添加元素命令:

rpush/lpush
rpush c b a   # cba,插入方向<-,即從右往左
lpush c b a   # abc,插入方向->,從左往右
linsert  # 在一個(gè)元素前或后插入元素

刪除元素命令:

lpop/rpop   #彈出
lrem        #刪除
ltrim   # 修剪列表返回一個(gè)子列表,會(huì)影響原列表

查詢(xún)?cè)孛睿?/p>

lrange  # 按照范圍查詢(xún)列表返回一個(gè)子列表
lindex  # 按索引取
llen    # 列表長(zhǎng)度
改
lset    # 修改某索引的值為新值

實(shí)戰(zhàn)場(chǎng)景1:微博中的時(shí)間軸功能(文章按時(shí)間排序,還可以做分頁(yè))

方案:做一個(gè)列表用于存放某個(gè)用戶(hù)的所有微博id,key為 weiboList:user:1,值為微博id。

做一個(gè)哈希,里面放微博的內(nèi)容。

該用戶(hù)新增一個(gè)微博就會(huì)忘列表中l(wèi)pop一個(gè)微博id,查詢(xún)的時(shí)候使用lrange即可,分頁(yè)也可以使用lrange。

blpop/brpop     # 是lpop和rpop的阻塞版

當(dāng)列表長(zhǎng)度不為空時(shí),lpop和blpop效果一樣。

當(dāng)列表長(zhǎng)度為空,lpop會(huì)立刻返回nil,而blpop會(huì)等待,直到有元素進(jìn)入列表,blpop就會(huì)執(zhí)行彈出。

它的應(yīng)用場(chǎng)景就是消息隊(duì)列。

小結(jié):

  • 用列表實(shí)現(xiàn)棧:lpush+lpop = stack
  • 用列表實(shí)現(xiàn)隊(duì)列:lpush+rpop = queue
  • 用列表實(shí)現(xiàn)固定集合: lpush+ltrim = capped collection
  • 用列表實(shí)現(xiàn)消息隊(duì)列:lpush+brpop = message queue

4.集合類(lèi)型

集合的特點(diǎn)是無(wú)序性和確定性(不重復(fù))。

新增元素命令
sadd


刪除元素命令
srem
scard #個(gè)數(shù)
sismember   #是否存在
srandmember # 隨機(jī)選n個(gè)元素
spop    # 隨機(jī)彈出元素,影響原集合
smembers    # 返回所有元素,要慎用,不要獲取內(nèi)容較大的集合

實(shí)戰(zhàn)場(chǎng)景1:抽獎(jiǎng)

使用spop即可,利用的是它的無(wú)序性和不重復(fù)。

實(shí)戰(zhàn)場(chǎng)景2:贊,踩,收藏功能等。

方案: 每一個(gè)用戶(hù)做一個(gè)收藏的集合,每個(gè)收藏的集合存放用戶(hù)收藏過(guò)的文章id或者商品id。

鍵名: set:userCol:用戶(hù)id

值:文章id

如果使用mysql實(shí)現(xiàn),需要建立多對(duì)多關(guān)系,要建中間表。

實(shí)戰(zhàn)場(chǎng)景3:給文章添加標(biāo)簽

方案: 要?jiǎng)?chuàng)建兩種集合,以文章id為鍵名放標(biāo)簽的集合,以標(biāo)簽id為鍵名放文章的集合。創(chuàng)建兩種集合是因?yàn)槲覀儠?huì)查詢(xún)某標(biāo)簽下有什么文章,也會(huì)查詢(xún)某文章下有什么標(biāo)簽

鍵名: article:1:tags    值:tag的id

鍵名: tag:1:users        值:user的id

而且這兩個(gè)集合創(chuàng)建時(shí)要放在一個(gè)事務(wù)中進(jìn)行。

sdiff/sinter/sunion     # 交集并集差集

實(shí)戰(zhàn)場(chǎng)景4:共同好友

5.有序集合

有序集合的特點(diǎn)是 有序,無(wú)重復(fù)值,相關(guān)命令如下:

zadd key score element
zrem
zscore      # 獲取分?jǐn)?shù)
zincrby     # 增加減少分?jǐn)?shù)
zcard       # 元素個(gè)數(shù)
zrange      # 按下標(biāo)范圍獲取元素,加上withscores會(huì)按分?jǐn)?shù)排序
zrangebyscore   # 按照分?jǐn)?shù)范圍獲取元素
zcount      # 按分?jǐn)?shù)范圍計(jì)算元素個(gè)數(shù)
zremrangebyrank     # 刪除指定下標(biāo)范圍的元素
zremrangebyscore

實(shí)戰(zhàn)場(chǎng)景1:排行榜

實(shí)戰(zhàn)場(chǎng)景2:延時(shí)隊(duì)列

最后強(qiáng)調(diào)一下,要慎用hgetall,原因如下:

當(dāng)一個(gè)hash的字段數(shù)很多,存儲(chǔ)的內(nèi)容很多時(shí),處理hgetall請(qǐng)求會(huì)花費(fèi)較長(zhǎng)時(shí)間;而redis是單線(xiàn)程,同一時(shí)間只能處理一個(gè)操作,所以后面的操作都要等待hgetall處理完畢才能處理,很影響效率和性能。

還有一種情況:列表或者集合中存了很多哈希的鍵名。

通過(guò) lrange 0 -1 或者 smembers 這樣的命令取出列表或者集合中所有鍵名再通過(guò)hgetall取出大量的hash,而每個(gè)hash中又有大量的字段。這種情況下性能會(huì)急劇下降,而且占用大量?jī)?nèi)存,甚至?xí)斐慑礄C(jī)。

下面總結(jié)時(shí)間復(fù)雜度為n的命令:

String類(lèi)型:

  • MSET、MSETNX、MGET

List類(lèi)型:

  • LPUSH、RPUSH、LRANGE、LINDEX、LSET、LINSERT
  • LINDEX、LSET、LINSERT 這三個(gè)命令謹(jǐn)慎使用

Hash類(lèi)型:

  • HDEL、HGETALL、HKEYS/HVALS
  • HGETALL、HKEYS/HVALS 謹(jǐn)慎使用

Set類(lèi)型:

  • SADD、SREM、SRANDMEMBER、SPOP、
  • SMEMBERS、SUNION/SUNIONSTORE、SINTER/SINTERSTORE、SDIFF/SDIFFSTORE
  • Set類(lèi)型的第二行命令謹(jǐn)慎使用。

Sorted Set類(lèi)型:

  • ZADD、ZREM、
  • ZRANGE/ZREVRANGE、ZRANGEBYSCORE/ZREVRANGEBYSCORE、ZREMRANGEBYRANK/ZREMRANGEBYSCORE
  • Sorted Set的第二行時(shí)間復(fù)雜度 O(log(N)+M),需要謹(jǐn)慎使用

其他常用命令:

  • DEL、KEYS
  • KEYS 命令謹(jǐn)慎使用

基本上,設(shè)置多個(gè)值或者獲取多個(gè)值的命令其時(shí)間復(fù)雜度為n。時(shí)間復(fù)雜度越高,執(zhí)行命令消耗的時(shí)間越長(zhǎng)。

責(zé)任編輯:趙寧寧 來(lái)源: 程序員阿沛
相關(guān)推薦

2019-08-12 15:40:26

Redis數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型

2023-07-04 08:41:08

Redis數(shù)據(jù)類(lèi)型

2020-11-04 07:34:02

Redis數(shù)據(jù)類(lèi)型

2019-11-11 14:55:25

Redis數(shù)據(jù)類(lèi)型命令

2023-04-28 15:05:25

React軟件項(xiàng)目可維護(hù)性

2016-08-18 14:13:55

JavaScript基本數(shù)據(jù)引用數(shù)據(jù)

2023-11-13 08:31:25

SpringRedis存儲(chǔ)

2024-03-13 14:57:37

2010-10-08 09:02:03

JavaScript基

2017-02-27 08:34:09

JavaScript數(shù)據(jù)引用

2021-06-15 09:20:08

Redis數(shù)據(jù)類(lèi)型

2023-03-27 10:04:27

數(shù)據(jù)類(lèi)型浮點(diǎn)型布爾型

2011-05-26 14:27:56

java

2020-10-26 13:46:07

Java基礎(chǔ)入門(mén)篇

2021-04-28 18:16:24

Rust數(shù)據(jù)類(lèi)型

2010-04-27 11:03:39

Oracle Java

2018-05-25 09:50:30

Java數(shù)據(jù)類(lèi)型類(lèi)型轉(zhuǎn)換

2009-08-14 11:15:45

C#基本數(shù)據(jù)類(lèi)型

2024-11-12 13:01:46

2024-06-11 08:30:31

點(diǎn)贊
收藏

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