日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

分布式缓存memcached

發(fā)布時(shí)間:2024/4/14 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式缓存memcached 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ?Memcached是一款開源、高性能、分布式內(nèi)存對(duì)象緩存系統(tǒng),可應(yīng)用各種需要緩存的場(chǎng)景,其主要目的是通過降低對(duì)數(shù)據(jù)庫的訪問來加速web應(yīng)用程序。它是一個(gè)基于內(nèi)存的“鍵值對(duì)”存儲(chǔ),用于存儲(chǔ)數(shù)據(jù)庫調(diào)用、API調(diào)用或頁面引用結(jié)果的直接數(shù)據(jù),如字符串、對(duì)象等。

一、memcached既不是一個(gè)代碼加速器,也不是數(shù)據(jù)庫中間件。其具有以下特點(diǎn)

? ?⑴內(nèi)置內(nèi)存存儲(chǔ)方式:為了提高性能,memcached中保存的數(shù)據(jù)都存儲(chǔ)在memcached內(nèi)置的內(nèi)存存儲(chǔ)空間中。重啟memcached,重啟操作系統(tǒng)會(huì)導(dǎo)致全部數(shù)據(jù)消失;

? ?⑵簡(jiǎn)單key/value存儲(chǔ):服務(wù)器不關(guān)心數(shù)據(jù)本身的意義及結(jié)構(gòu),只要是可序列化數(shù)據(jù)即可。存儲(chǔ)項(xiàng)由“鍵、過期時(shí)間、可選的標(biāo)志及數(shù)據(jù)”四個(gè)部分組成;

? ?⑶O(1)的執(zhí)行效率;

? ?⑷基于libevent的事件處理:libevent是個(gè)函數(shù)庫,它將Linux的epoll、BSD類操作系統(tǒng)的kqueue等時(shí)間處理功能封裝成統(tǒng)一的接口。memcached使用這個(gè)libevent庫,能發(fā)揮高性能;

? ?⑸功能的實(shí)現(xiàn)一半依賴于客戶端,一半基于服務(wù)器端:客戶負(fù)責(zé)發(fā)送存儲(chǔ)項(xiàng)至服務(wù)器端、從服務(wù)端獲取數(shù)據(jù)以及無法連接至服務(wù)器時(shí)采用相應(yīng)的動(dòng)作;服務(wù)端負(fù)責(zé)接收、存儲(chǔ)數(shù)據(jù),并設(shè)置數(shù)據(jù)項(xiàng)的過期時(shí)長(zhǎng);

? ?⑹各服務(wù)器間不會(huì)通信以共享信息;memcached雖然是分布式緩存服務(wù)器,但服務(wù)器端并沒有分布式功能,此功能主要通過客戶端實(shí)現(xiàn);

? ?⑺清理超期數(shù)據(jù):默認(rèn)情況下,Memcached是一個(gè)LRU緩存,同時(shí),它按事先預(yù)訂的時(shí)長(zhǎng)清理超期數(shù)據(jù);但事實(shí)上,memcached不會(huì)刪除任何已緩存數(shù)據(jù),只是在其過期之后不再為客戶端所見;而且,memcached也不會(huì)真正按期限清理緩存,而僅是當(dāng)get命令到達(dá)時(shí)檢查其時(shí)長(zhǎng),發(fā)現(xiàn)過期才清理;


二、memcached的內(nèi)存管理

? ? 可參考http://blog.csdn.net/dato/article/details/1968663


三、安裝memcached

? ?1、memcached依賴于libevent實(shí)現(xiàn)并發(fā)處理,先要安裝后libevent包,不過此包是系統(tǒng)標(biāo)配;

? ? ? ?yum -y install memcached

? ?2、啟動(dòng)memcached服務(wù)

? ? ? ?service memcached start ? #memcached默認(rèn)監(jiān)聽在TCP和UDP的11211號(hào)端口

[root@node4?~]#?rpm?-q?libevent libevent-1.4.13-4.el6.x86_64 [root@node4?~]#?yum?-y?install?memcached ... [root@node4?~]#?rpm?-ql?memcached /etc/rc.d/init.d/memcached /etc/sysconfig/memcached???#主配置文件 /usr/bin/memcached???#主程序 /usr/bin/memcached-tool /usr/share/doc/memcached-1.4.4 ... [root@node4?~]#?vim?/etc/sysconfig/memcached?PORT="11211" USER="memcached" MAXCONN="1024"???#并發(fā)連接數(shù) CACHESIZE="64"???#用于緩存的空間大小??? OPTIONS="" [root@node4?~]#?service?memcached?start ... [root@node4?~]#?ss?-tunl Netid?State??????Recv-Q?Send-Q???????????????Local?Address:Port?????????????????Peer?Address:Port?udp???UNCONN?????0??????0???????????????????????:::11211??????????????????????????:::*????? tcp???LISTEN?????0??????128?????????????????????:::11211??????????????????????????:::*????? tcp???LISTEN?????0??????128??????????????????????*:11211???????????????????????????*:*????? ...

? ?3、memcached主程序常用選項(xiàng)

? ? ? ?-l <ip_addr>:指定進(jìn)程監(jiān)聽的地址

? ? ? ?-d: 以守護(hù)進(jìn)程模式運(yùn)行;

? ? ? ?-u <username>:以指定的用戶身份運(yùn)行memcached進(jìn)程;

? ? ? ?-m <num>:用于緩存數(shù)據(jù)的最大內(nèi)存空間,單位為MB,默認(rèn)為64MB;

? ? ? ?-c <num>:最大支持的并發(fā)連接數(shù),默認(rèn)為1024;

? ? ? ?-p <num>: 指定監(jiān)聽的TCP端口,默認(rèn)為11211;

? ? ? ?-P <filename>: pid文件

? ? ? ?-U <num>:指定監(jiān)聽的UDP端口,默認(rèn)為11211,0表示關(guān)閉UDP端口;

? ? ? ?-t <threads>:用于處理入站請(qǐng)求的最大線程數(shù),僅在memcached編譯時(shí)開啟了支持線程才有效;

? ? ? ?-f <num>:設(shè)定Slab Allocator定義預(yù)先分配內(nèi)存空間大小固定的塊時(shí)使用的增長(zhǎng)因子;默認(rèn)為1.25

? ? ? ?-M:當(dāng)內(nèi)存空間不夠使用時(shí)返回錯(cuò)誤信息,而不是按LRU算法利用空間;

? ? ? ?-n: 指定最小的slab chunk大小;單位是字節(jié);

? ? ? ?-S: 啟用sasl進(jìn)行用戶認(rèn)證;

[root@node4?~]#?memcached?-u?memcached?-vv slab?class???1:?chunk?size????????96?perslab???10922 slab?class???2:?chunk?size???????120?perslab????8738 slab?class???3:?chunk?size???????152?perslab????6898 slab?class???4:?chunk?size???????192?perslab????5461 slab?class???5:?chunk?size???????240?perslab????4369 slab?class???6:?chunk?size???????304?perslab????3449 slab?class???7:?chunk?size???????384?perslab????2730 slab?class???8:?chunk?size???????480?perslab????2184 slab?class???9:?chunk?size???????600?perslab????1747 slab?class??10:?chunk?size???????752?perslab????1394 ... [root@node4?~]#?memcached-tool?127.0.0.1#??Item_Size??Max_age???Pages???Count???Full???Evicted?Evict_Time?OOM1??????96B?????80717s???????1???????1??????no????????0????????0????0 [root@node4?~]#?memcached-tool?127.0.0.1?stats #127.0.0.1:11211???Field???????Value...pointer_size??????????64rusage_system????1.216815rusage_user????1.241811threads???????????4time??1463497553total_connections??????????17total_items???????????7uptime???????81292version???????1.4.4


四、Memcached提供了為數(shù)不多的幾個(gè)命令來完成與服務(wù)器端的交互,這些命令基于memcached的協(xié)議實(shí)現(xiàn)。

? 1、存儲(chǔ)類命令:set, add, replace, append, prepend

? ? ? 用法:<command> <key> <flag> <expire> <size>

? ? ? ? ? <value>

? ? ? ? ?例如:set user 0 0 8 ? #過期時(shí)長(zhǎng)為0表示永不過期

? ? ? ? ? ? ?jerry

? ? ? set:無論如何都存儲(chǔ),數(shù)據(jù)不存在時(shí)存儲(chǔ),數(shù)據(jù)存在時(shí)更新

? ? ? add:數(shù)據(jù)不存在時(shí)進(jìn)行添加

? ? ? replace:替換

? ? ? append:將數(shù)據(jù)追加到當(dāng)前緩存數(shù)據(jù)的之后

? ? ? prepend:將數(shù)據(jù)追加到當(dāng)前緩存數(shù)據(jù)的之前

? 2、獲取數(shù)據(jù)類命令:get, delete, incr/decr

? ? ? get key1 key2...:讀取?

? ? ? incr/decr key:對(duì)數(shù)字型的對(duì)象進(jìn)行增/減操作 ? ??

? 3、統(tǒng)計(jì)類命令:

? ? ? stats:查看memcached運(yùn)行狀態(tài)

? ? ? stats items:

? ? ? stats slabs:顯示各個(gè)slab的信息,包括chunk的大小、數(shù)目、使用情況等

? ? ? stats sizes:輸出所有item的大小和個(gè)數(shù)

? 4、清理命令:

? ? ? delete key:刪除

? ? ? flush_all:將當(dāng)前所有緩存數(shù)據(jù)設(shè)置為過期,但不會(huì)釋放內(nèi)存

[root@node4?~]#?telnet?127.0.0.1?11211???#使用telnet命令測(cè)試memcached的使用 Trying?127.0.0.1... Connected?to?127.0.0.1. Escape?character?is?'^]'. set?user?0?60?5? jerry STORED add?gender?0?60?6 female STORED get?user VALUE?user?0?5 jerry END delete?gender DELETED stats STAT?pid?37622 STAT?uptime?80761 STAT?time?1463497022 STAT?version?1.4.4 STAT?pointer_size?64 STAT?rusage_user?1.241811 STAT?rusage_system?1.173821 STAT?curr_connections?10 STAT?total_connections?15 STAT?connection_structures?11 ... STAT?listen_disabled_num?0 STAT?threads?4 STAT?conn_yields?0 STAT?bytes?74 STAT?curr_items?1 STAT?total_items?7 STAT?evictions?0 END


五、PHP作為memcached的客戶端

? 1、在php-fpm服務(wù)器上安裝PHP的memcache擴(kuò)展

? ? ? # wget https://pecl.php.net/get/memcache-2.2.7.tgz

? ? ? # tar xf memcache-2.2.7.tgz

? ? ? # cd memcache-2.2.7

? ? ? # /usr/local/php/bin/phpize ? 生成configure文件

? ? ? # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache

? ? ? # make && make install

? ? 安裝完后會(huì)有類似以下的提示:

? ? ? Installing shared extensions: ? /usr/local/php/lib/php/extensions/no-debug-non-zts-20130626/ ? ? ? ? ?

? 2、編輯/usr/local/php/lib/php.ini,在“動(dòng)態(tài)模塊”相關(guān)的位置添加memcache擴(kuò)展的路徑:

? ? ? extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20130626/memcache.so


? ◆補(bǔ)充:rpm方式安裝的php-fpm如何加載擴(kuò)展模塊

? ? ? 此種情況需要先安裝php-devel包,該包能提供phpize和php-config兩個(gè)二進(jìn)制程序。其余步驟與上述類似,根據(jù)實(shí)際情況做適當(dāng)修改即可。

? ? ? # yum -y install php-devel

? ? ? ......

? ? ? # ./configure --with-php-config=/usr/bin/php-config --enable-memcache

? ? ? ...

? ? ? cp tmp-php.ini /etc/php.d/

? ? ? vim /etc/php.d/tmp-php.ini

? ? ? ??extension=/usr/lib64/php/modules/memcache.so


? ?示例:

??

#此例中的php-fpm是使用rpm方式安裝的,所以若欲對(duì)其做擴(kuò)展就要先安裝php-devel [root@node1?~]#?yum?-y?install?php-devel ... [root@node1?~]#?rpm?-ql?php-devel /etc/rpm/macros.php /usr/bin/php-config /usr/bin/phpize /usr/include/php ... [root@node1?~]#?wget?https://pecl.php.net/get/memcache-2.2.7.tgz????#下載memcache擴(kuò)展源碼包 ... [root@node1?~]#?tar?xf?memcache-2.2.7.tgz? [root@node1?~]#?cd?memcache-2.2.7 [root@node1?memcache-2.2.7]#?phpize????#生成configure文件 Configuring?for: PHP?Api?Version:?????????20090626 Zend?Module?Api?No:??????20090626 Zend?Extension?Api?No:???220090626 [root@node1?memcache-2.2.7]#?ls acinclude.m4????config9.m4????config.sub????CREDITS??????Makefile.global?????????????memcache.php????????memcache_standard_hash.c??README aclocal.m4??????config.guess??configure?????example.php??memcache.c??????????????????memcache_queue.c????missing???????????????????run-tests.php autom4te.cache??config.h.in???configure.in??install-sh???memcache_consistent_hash.c??memcache_queue.h????mkinstalldirs build???????????config.m4?????config.w32????ltmain.sh????memcache.dsp????????????????memcache_session.c??php_memcache.h [root@node1?memcache-2.2.7]#?./configure?--with-php-config=/usr/bin/php-config?--enable-memcache???#編譯 ... [root@node1?memcache-2.2.7]#?make?&&?make?install ... Build?complete. Don't?forget?to?run?'make?test'.Installing?shared?extensions:?????/usr/lib64/php/modules/???#memcache模塊的目錄[root@node1?memcache-2.2.7]#?ls?/usr/lib64/php/modules/ curl.so??fileinfo.so??json.so??memcache.so??phar.so??zip.so [root@node1?memcache-2.2.7]#?cp?tmp-php.ini?/etc/php.d/ [root@node1?memcache-2.2.7]#?vim?/etc/php.d/tmp-php.ini 在Dynamic?Extensions段下添加: extension=/usr/lib64/php/modules/memcache.so [root@node1?memcache-2.2.7]#?service?php-fpm?restart ...


? 3、對(duì)memcached功能進(jìn)行測(cè)試,在網(wǎng)站目錄中建立測(cè)試頁面test.php,添加如下內(nèi)容:

? ? ?<?php

? ? ? ?$mem = new Memcache;

? ? ? ?$mem->connect("192.168.30.14", 11211) or die("Could not connect");

? ? ? ?$version = $mem->getVersion();

? ? ? ?echo "Server's version: ".$version."<br/>\n";

? ? ? ?$mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");

? ? ? ?echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";

? ? ? ?$get_result = $mem->get('hellokey');

? ? ? ?echo "$get_result is from memcached server."; ? ? ? ??

? ? ? ?>

? ? ? 如果有輸出“Hello World is from memcached.”等信息,則表明memcache已經(jīng)能夠正常工作。

[root@node1?~]#?vim?/web/scripts/memtest.php????#創(chuàng)建一個(gè)測(cè)試頁<?php$mem?=?new?Memcache;$mem->connect("192.168.30.14",?11211)?or?die("Could?not?connect");$version?=?$mem->getVersion();echo?"Server's?version:?".$version."<br/>\n";$mem->set('hellokey',?'Hello?World',?0,?600)?or?die("Failed?to?save?data?at?the?memcached?server");echo?"Store?data?in?the?cache?(data?will?expire?in?600?seconds)<br/>\n";$get_result?=?$mem->get('hellokey');echo?"$get_result?is?from?memcached?server."; ?>


六、php程序調(diào)用memcached服務(wù)的另一個(gè)擴(kuò)展memcached

? ? memcache擴(kuò)展是原生的(基于pecl擴(kuò)展庫),而memcached擴(kuò)展是基于libmemcached庫開發(fā)的,libmemcached是memcache的C接口,具有低內(nèi)存,線程安全等特點(diǎn);memcached擴(kuò)展支持Binary Protocol,而memcache擴(kuò)展不支持;總之,memcached擴(kuò)展相對(duì)來說具有更高的性能。

? ? libmemcached還提供了數(shù)個(gè)可以遠(yuǎn)程使用的memcached管理工具,如memcat, memping,memstat,memslap等。

? ? 既然memcached擴(kuò)展基于limemcached,因此要先編譯安裝libmemcached;libmemcached的源碼包可到https://launchpad.net/libmemcached/+download獲取,memcached擴(kuò)展的源碼包可到http://pecl.php.net/上獲取;

? ? 編譯memcached擴(kuò)展

? ? ? ./configure --with-libmemcached-dir=/path/to/somedir(指定libmemcached的安裝目錄) --enable-memcached

? ? 其它步驟與安裝memcache擴(kuò)展類似,不再贅述


七、memcached的圖形管理工具

? ?memcached的圖形管理管理工具主要有memcachephpmemadmin-masterphpMemcachedAdmin

? ?phpMemcachedAdmin的壓縮包可到http://blog.elijaa.org/phpmemcachedadmin-download-version-1-2-2/獲取

[root@node1?scripts]#?ls index.php??memcachephp.zip??memtest.php [root@node1?scripts]#?unzip?memcachephp.zip? [root@node1?scripts]#?ls index.php??memcache.php??memcachephp.zip??memtest.php [root@node1?scripts]#?vim?memcache.php?<?php ... $VERSION='$Id:?memcache.php,v?1.1.2.3?2008/08/28?18:07:54?mikl?Exp?$';define('ADMIN_USERNAME','magedu');??????//?Admin?Username???#設(shè)置一個(gè)賬號(hào)和密碼 define('ADMIN_PASSWORD','123');?????????//?Admin?Password define('DATE_FORMAT','Y/m/d?H:i:s'); define('GRAPH_SIZE',200); define('MAX_ITEM_DUMP',50);$MEMCACHE_SERVERS[]?=?'192.168.30.14:11211';?//?add?more?as?an?array???#指定memcached服務(wù)器地址 ...


八、memcached的分布式

? ? memcached本身沒有“分布式”的功能,memcached的分布式是由客戶端實(shí)現(xiàn)的。memcached的客戶端接口(API,函數(shù)庫)用hash算法根據(jù)“鍵”來決定保存數(shù)據(jù)的memcached服務(wù)器。獲取數(shù)據(jù)時(shí)把要獲取的“鍵”傳遞給函數(shù)庫,函數(shù)庫通過與數(shù)據(jù)保存時(shí)相同的算法,根據(jù)“鍵”選擇服務(wù)器。使用的算法相同,就能選中與保存時(shí)相同的服務(wù)器。這樣,將不同的鍵保存到不同的服務(wù)器上,就實(shí)現(xiàn)了memcached的分布式。memcached服務(wù)器增多后,鍵就會(huì)分散,即使一臺(tái)memcached服務(wù)器發(fā)生故障無法連接,也不會(huì)影響其他的緩存。

? ? 為了減小增刪節(jié)點(diǎn)對(duì)緩存的影響和增加緩存的平衡性,應(yīng)盡量使用“一致性hash”算法,關(guān)于“一致性hash”算法,可參考http://blog.csdn.net/cywosp/article/details/23397179

? 1、使用“一致性hash”算法做緩存分布示例

? ? ①啟動(dòng)若干個(gè)memcached服務(wù)器;這里為演示方便,僅在一個(gè)memcached服務(wù)主機(jī)上啟動(dòng)幾個(gè)實(shí)例

[root@node4?~]#?memcached?-d?-u?memcached?-m?20?-p?11211 [root@node4?~]#?memcached?-d?-u?memcached?-m?20?-p?11212 [root@node4?~]#?memcached?-d?-u?memcached?-m?20?-p?11213 [root@node4?~]#?ss?-tnl State???????Recv-Q?Send-Q???????????????????Local?Address:Port???????????????????????Peer?Address:Port? LISTEN??????0??????128??????????????????????:::11211?????????????????????????????????:::*????? LISTEN??????0??????128??????????????????????*:11211??????????????????????????????????*:*????? LISTEN??????0??????128??????????????????????:::11212?????????????????????????????????:::*????? LISTEN??????0??????128??????????????????????*:11212??????????????????????????????????*:*????? LISTEN??????0??????128??????????????????????:::11213?????????????????????????????????:::*????? LISTEN??????0??????128??????????????????????*:11213??????????????????????????????????*:* ...

? ?②修改php的memcache擴(kuò)展源碼包中的memcache.c文件中的算法設(shè)置,然后重新編譯

? ? ??"memcache.hash_strategy", ? ? ? ? "consistent"

? ? ? ?MEMCACHE_G(hash_strategy) ? ? ? ?= MMC_CONSISTENT_HASH;

? ? 當(dāng)然,可不用修改源碼重新編譯,還有另外的設(shè)置方法,可參考http://wtm-mac.iteye.com/blog/1687746

[root@node1?~]#?tar?xf?memcache-2.2.7.tgz? [root@node1?~]#?cd?memcache-2.2.7 [root@node1?memcache-2.2.7]#?vim?memcache.c ... "memcache.hash_strategy",?????????"consistent" ... MEMCACHE_G(hash_strategy)????????=?MMC_CONSISTENT_HASH; #?之后的編譯安裝的步驟略

? ?③創(chuàng)建一個(gè)測(cè)試文件

? ? ? ?vim /web/scripts/distribute.php

[root@node1?~]#?vim?/web/scripts/distribute.php?$mem?=?new?Memcache; $mem->addServer('192.168.30.14',?11211); $mem->addServer('192.168.30.14',?11212); $mem->addServer('192.168.30.14',?11213);$key1?=?'mdtest1'; $value1?=?'1'; $mem->add($key1,?$value1);$key2?=?'mdtest2'; $value2?=?'2'; $mem->add($key2,?$value2);$key3?=?'mdtest3'; $value3?=?'3'; $mem->add($key3,?$value3);$key4?=?'mdtest4'; $value4?=?'4'; $mem->add($key4,?$value4);$key5?=?'mdtest5'; $value5?=?'5'; $mem->add($key5,?$value5);$key6?=?'mdtest6'; $value6?=?'6'; $mem->add($key6,?$value6);echo?"OK"; ?>

? 2、利用magent搭建memcached集群

? ? magent是一個(gè)緩存代理服務(wù)器,可以連接多臺(tái)后端Memcached服務(wù)器,它接受客戶端的請(qǐng)求,根據(jù)一定的算法做緩存分布,而且還能對(duì)后端memcached緩存做高可用。具體的安裝配置可參考http://www.php-note.com/article/detail/800


九、Nginx整合memcached

? ?nginx的memcached模塊能夠?qū)崿F(xiàn)調(diào)用memcached服務(wù)進(jìn)行緩存

? ?配置示例:

? ? ?server {

? ? ? ? listen ? ? ? 80;

? ? ? ? server_name ?www.magedu.com;

? ? ? ? #charset koi8-r;

? ? ? ? #access_log ?logs/host.access.log ?main;

? ? ? ? location / {

? ? ? ? ? ? set $memcached_key $uri?$args; ? #表示將請(qǐng)求的URI作為查詢的key

? ? ? ? ? ? memcached_pass ? 127.0.0.1:11211;

? ? ? ? ? ? default_type ? ?text/html;

? ? ? ? ? ? error_page ? ? 404 @fallback;

? ? ? ? }

? ? ? ? location @fallback {

? ? ? ? ? ? ? ? proxy_pass http://172.16.0.1;

? ? ? ? }

? ? ? }

? ?memcached模塊中的一些指令:

? ? ?memcached_pass address;

? ? ?memcached_buffer_size size;

? ? ?memcached_connect_timeout time;

? ? ?memcached_read_timeout time;

? ? ?memcached_send_timeout time;

? ? ?這些指令與proxy模塊中的指令類似,其用法不再贅述,可查看官方文檔

轉(zhuǎn)載于:https://blog.51cto.com/9124573/1774564

總結(jié)

以上是生活随笔為你收集整理的分布式缓存memcached的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。