當前位置:首頁 » 硬碟大全 » 讀取電子表單配置欄位並放入緩存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

讀取電子表單配置欄位並放入緩存

發布時間: 2022-05-28 21:37:28

⑴ android studio 編程如何實現讀取微信緩存的excel表格

Part One 前情提要
本文是使用AndroidStudio來編寫代碼,來實現對Excel表格中的數據讀取。

實際工作開發中我們可能需要從Excel表格中讀取數據,以實現實際需求。比如:

1.將Excel表格中的數據導入資料庫中(可能不是完全按照表格中的現有數據格式)
2.將Excel表格中的數據讀出來,進行一些操作只後,再寫回Excel表格中
3.單純的讀取數據
… …

總會有那麼一天可能你也要和Excel打打交道,所以現在如果你有時間可以先來學習一下,了解一下。充實一下自己。

註:突然需要是用Excel,主要也是因為最近公司計劃玩一玩大數據。所以這幾天需要使用Excel造一些假數據(因為老闆們不熟悉資料庫,我總不能給他們一人一個sql吧),所以也算是沒有辦法,只能把數據填寫到Excel中了。

Part Two 主角登場
操作步驟:
1.下載讀取Excel需要引用的jar包

下載jar包:jxl.jar,點擊下載jxl.jar

2.下載好需要的jar包以後,接下來我們使用AndroidStudio創建一個Project。創建好了以後,我們下載下來的jar包添加到項目中。
添加結果如下:

3.接下來就是使用這個jar中的工具類來進行,Excel表格的操作了。

對Excel表格操作主要使用到jar中的3個類
jxl.Workbook Excel文件類實體

代碼示例:
// 「data_table.xls」 相對路徑或者絕對路徑均可以
Workbook book = Workbook.getWorkbook(new File(「data_table.xls」));
// 「data_table.xls」 android項目中assets目錄中 文件名
Workbook book = Workbook.getWorkbook(assetManager.open(「data_table.xls」));

jxl.Sheet 表格類

代碼示例:
//獲得第一個工作表對象(ecxel中sheet的編號從0開始,0,1,2,3,….)
Sheet sheet = book.getSheet(0);

jxl.Cell 單元格類

代碼示例:
// 獲取第0行第0列的一個單元格(表格左上角第一個單元格)
Cell cell = sheet.getCell(0, 0); //(列,行)

4.Workbook類 方法

⑵ oracle keep pool會不會自動緩存cache的表數據的更改

ORACLE緩存是把ORACLE近期查看的語句防止在ORACLE設定的緩存當中
ORACLE緩存表是把表某個表放置在緩存當中,緩存是ORACLE在內存中的一個分區
表緩存的設定
oracle中如何將表緩存到內存中
由於在一些靜態資料表在資料庫中被頻繁的訪問,所以可以考慮將這些數據量不大的表緩存到內存當中。
將fisher表緩存到內存中
alter table fisher cache;方法一
2)alter table fisher storage(buffer_pool keep);方法二
--取消緩存
1)alter table fisher nocache;
2)alter table fisher storage(buffer_pool default);
select table_name,OWNER,cache,buffer_pool from dba_tables where table_name='FISHER'; --查看是否緩存
select * from dba_segments where segment_name='FISHER' ; --查看錶大小
方法一: cache是將表緩存到share pool 中,該操作直接將表緩存的熱端,受LRU演算法控制。
方法二:將表緩存到一個固定的內存空間中,默認情況下buffer_pool空間為0,。需手動設置空間大小。
設置空間大小:alter system set db_keep_cache_size=50M scope=both sid=『*';
--表緩存
alter table table_name cache = alter table table_name storage(buffer_pool default);
alter table table_name storage(buffer_pool keep);
--已經加入到KEEP區的表想要移出緩存,使用
alter table table_name nocache;
--查看哪些表被放在緩存區 但並不意味著該表已經被緩存
select table_name from dba_tables where buffer_pool='keep';
--查詢到該表是否已經被緩存
select table_name,cache,buffer_pool from user_TABLES where cache like '%Y';
--查詢當前用戶下表的情況
select table_name,cache,buffer_pool from user_TABLES;
--對於普通LOB類型的segment的cache方法
alter table t2 modify lob(c2) (storage (buffer_pool keep) cache);
--取消緩存
alter table test modify lob(address) (storage (buffer_pool keep) nocache);
keep Buffer Pool
Keep Buffer Pool 的作用是緩存那些需要經常查詢的對象但又容易被默認緩沖區置換出去的對象,按慣例,Keep pool設置為合理的大小,以使其中存儲的對象不再age out,也就是查詢這個對象的操作不會引起磁碟IO操作,可以極大地提高查詢性能。
默認的情況下 db_keep_cache_size=0,未啟用,如果想要啟用,需要手工設置db_keep_cache_size的值,設置了這個值之後 db_cache_size 會減少。
並不是我們設置了keep pool 之後,熱點表就一定能夠緩存在 keep pool ,keep pool 同樣也是由LRU 鏈表管理的,當keep pool 不夠的時候,最先緩存到 keep pool 的對象會被擠出,不過與default pool 中的 LRU 的管理方式不同,在keep pool 中表永遠是從MRU 移動到LRU,不會由於你做了FTS而將表緩存到LRU端,在keep pool中對象永遠是先進先出。當oracle發現你的表太太,大過你設定keep pool的大小是,根本就不會放到keep池中去的(如keep pool設定100M ,設定的用戶緩存的表為200M)。可以用select segment_name from dba_segments where BUFFER_POOL = 'KEEP';語句查看便知。
10g中SGA自動管理,ORACLE並不會為我們管理keep pool ,ORACLE只會管理default pool。
查看 keep pool 大小
SQL> select component,current_size from v$sga_dynamic_components
2 where component='KEEP buffer cache';
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
KEEP buffer cache 0
手動分配keep pool
SQL> show parameter keep
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
control_file_record_keep_time integer 7
db_keep_cache_size big integer 0
SQL> alter system set db_keep_cache_size=10m;
系統已更改。
SQL> show parameter keep
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
control_file_record_keep_time integer 7
db_keep_cache_size big integer 16M這里keep pool 16M,可我前面設置命名是10m了?
SQL> select component,current_size from v$sga_dynamic_components where component='KEEP buffer cache';
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
KEEP buffer cache 16777216 這里keep pool 16M,可我前面設置命名是10m了?
查看keep pool剩餘大小
SQL> select p.name,a.cnum_repl "total buffers",a.anum_repl "free buffers" from x$kcbwds a, v$buffer_pool p
2 where a.set_id=p.LO_SETID and p.name='KEEP';
NAME total buffers free buffers
-------------------- ------------- ------------
KEEP 1984 1984
可以看到沒有使用過keep 池
指定table的緩存池
SQL>create table test as select * from dba_objects;;
Table created.
SQL> alter table test storage(buffer_pool keep);
Table altered.
或者是
create table test storage(buffer_pool keep) as select * from dba_objects;
查看放入Keep的對象
SQL> select segment_name from dba_segments where BUFFER_POOL = 'KEEP';
SEGMENT_NAME
--------------------------------------------------------------------------------
TEST
SQL> /
NAME total buffers free buffers
-------------------- ------------- ------------
KEEP 1984 1962 可以看到使用了22個block
查看以上的表佔用了db_keep_cache_size 多大的空間?
SQL> select substr(sum(b.NUMBER_OF_BLOCKS) * 8129 / 1024 / 1024, 1, 5) || 'M'
from (SELECT o.OBJECT_NAME, COUNT(*) NUMBER_OF_BLOCKS
FROM DBA_OBJECTS o, V$BH bh, dba_segments dd
WHERE o.DATA_OBJECT_ID = bh.OBJD
AND o.OWNER = dd.owner
and dd.segment_name = o.OBJECT_NAME
and dd.buffer_pool != 'DEFAULT'
GROUP BY o.OBJECT_NAME
ORDER BY COUNT(*)) b; 2 3 4 5 6 7 8 9
SUBSTR(SUM(
-----------
3.643M
SQL> select table_name,cache,blocks from dba_tables where wner='ROBINSON' and buffer_pool='KEEP';
TABLE_NAME CACHE BLOCKS
------------------------------ -------------------- ----------
TEST N 22
可以看到這個表的 22個block 全部cache 到 keep pool ,這里的cache 欄位表明 這個表 還沒有使用 這個命令 alter table test cache,如果 使用了 alter table test cache ,命令,那麼 N 將變成Y
總結:如果表經常使用,而且表較小,可以設置 keep pool ,將table 全部 cache 到 keep pool, keep pool 要麼 全部 cache 一個table ,要麼不cache 。所以,對於大表來說,如果想要 cache 到 keep pool, 就需要設置 較大的 keep pool ,以容納大的 table,否者就沒有作用了。
Recycle Buffer Pool
Recycle Buffer Pool正好相反。Recycle Buffer Pool用於存儲臨時使用的、不被經常使用的較大的對象,這些對象放置在Default Buffer Pool顯然是不合適的,這些塊會導致過量的緩沖區刷新輸出,而且不會帶來任何好處,因為等你想要再用這個塊時,它可已經老化退出了緩存。要把這些段與默認池和保持池中的段分開,這樣就不會導致默認池和保持池中的塊老化而退出緩存。
SQL> show parameter recyc
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle string
db_recycle_cache_size big integer 12M
recyclebin string on
如何將一個表放入Recycle Buffer Pool中:
SQL> alter table test1 storage (buffer_pool recycle);
Table altered.
很多老的文檔會提及buffer_pool_keep和buffer_pool_recycle 這兩個參數,其實這兩個參數已經廢棄,由新參數db_keep_cache_size和db_recycle_cache_size 替代:
SQL>select ISDEPRECATED,NAME from v$parameter where name = 'buffer_pool_keep';
ISDEP NAME
----- -----------------
TRUE buffer_pool_keep
=======================================================================================
--表緩存
alter table ..... storage(buffer_pool keep);
--查看哪些表被放在緩存區 但並不意味著該表已經被緩存
select table_name from dba_tables where buffer_pool='keep';
--查詢到該表是否已經被緩存
select table_name,cache,buffer_pool from user_TABLES where cache like '%Y';
--已經加入到KEEP區的表想要移出緩存,使用
alter table table_name nocache;
--批量插入ORACLE建議用
insert all into ...insert into ...select 1 from al;
insert all into ... insert into ...select 1 from al;
--查詢當前用戶下表的情況
select table_name,cache,buffer_pool from user_TABLES;
--對於普通LOB類型的segment的cache方法
alter table t2 modify lob(c2) (storage (buffer_pool keep) cache);
--取消緩存
alter table test modify lob(address) (storage (buffer_pool keep) nocache);
--查詢段
select segment_name,segment_type,buffer_pool from user_segments;
--對基於CLOB類型的對象的cache方法
alter table lob1 modify lob(c1.xmldata) (storage (buffer_pool keep) cache);
--查詢該用戶下所有表內的大欄位情況
select column_name,segment_name from user_lobs;
來一段Tom關於Multiple Buffer Pools的解釋,講解得很清楚:
實際上,這3 個池會以大體相同的方式管理塊;將塊老化或緩存的演算法並沒有根本的差異。這樣做的目標是讓DBA 能把段聚集到「熱」區(hot)、「溫」區(warm)和「不適合緩存」區(do not care to cache)。
理論上講,默認池中的對象應該足夠熱(也就是說,用得足夠多),可以保證一直呆在緩存中。緩存會把它們一直留在內存中,因為它們是非常熱門的塊。可能還有一些段相當熱門,但是並不太熱;這些塊就作為溫塊。這些段的塊可以從緩存刷新輸出,為不常用的一些塊(「不適合緩存」塊)騰出空間。為了保持這些溫段的塊得到緩存,可以採取下面的某種做法:將這些段分配到保持池,力圖讓溫塊在緩沖區緩存中停留得更久。將「不適合緩存」段分配到回收池,讓回收池相當小,以便塊能快速地進入緩存和離開緩存(減少管理的開銷)。這樣會增加DBA 所要執行的管理工作,因為要考慮3 個緩存,要確定它們的大小,還要為這些緩存分配對象。還要記住,這些池之間沒有共享,所以,如果保持池有大量未用的空間,即使默認池或回收池空間不夠用了,保持池也不會把未用空間交出來。總之,這些池一般被視為一種非常精細的低級調優設備,只有所有其他調優手段大多用過之後才應考慮使用。
按以上步驟把表storage到keep pool中,然後調用alter system flush buffer_cache清空緩存,再全表掃描該表並打開執行計劃跟蹤,發現有physical reads,如下:
第一次執行計劃如下:
----------------------------------------------------------
0 recursive calls
0 db block gets
253 consistent gets
251 physical reads
0 redo size
520 bytes sent via SQL*Net to client
469 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
第二次執行計劃如下:
----------------------------------------------------------
0 recursive calls
0 db block gets
253 consistent gets
0 physical reads
0 redo size
520 bytes sent via SQL*Net to client
469 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
不知道是否可以這樣理解:對於storage到keep pool中的表,第一次會直接physical reads 到keep pool中,下次就直接從keep pool中讀了。flush buffer_cache會清空keep pool,這個試驗就可以證明。
像上面這樣連續執行2次再看執行計劃,和不設置keep pool時的執行計劃應該一樣的,因為讀第二次時,也是從default cache中讀。但是當我們多讀幾個大表到buffer cache後,也就是替換原來從default cache中讀取的數據後,再去讀放入keep中的表時,就會發現keep確實起作用了,唉,終於明白怎麼一回事,害得我為flush buffer導致keep中的表也phisical郁悶了半天。
ORACLE緩存設置
Oracle緩存由兩個參數控制SGA_TARGET和PGA_AGGREGATE_TARGET,設置了這兩個參數,其他的基本內存部分都由Oracle自動配置為最優值,這也是Oracle推薦的方式。
SGA_TARGET 和PGA_AGGREGATE_TARGET是動態參數,可以在不重啟資料庫的情況下修改。但是SGA_TARGET受限於 sga_max_size,SGA_TARGET不能超過sga_max_size,所以要增大sga_target先要增大sga_max_size,而sga_max_size是靜態參數,修改sga_max_size必須重啟Oracle。
所以修改sga_target和pga_aggregate_target的過程如下:
1、修改sga_max_size
SQL>ALTER SYSTEM SET sga_max_size=4g scope=spfile;
2、重啟Oracle
3、設置參數sga_target和pga_aggregate_target,
alter system set sga_target=4G;
alter system set pga_aggregate_target=1g;
如果使用的是10g,已經是ASM, oracle會根據統計的信息,自動的來調整你的內存組件的大小,你只需要設置sga_target即可。當然你可以手動設置 db_cache_size,如果設置了的話,Oracle會在自動調整內存大小的時候把這個作為db_cache_size的最小值。
對於sga_target,在動態修改的時候,最大值不能操過sga_max_size, 如果是用scope=spfile這個方式來修改可以超過sga_max_size,應該此時sga_max_size也跟著變大了,如果超過的話。
Oracle 對資料庫的cache有他自己的計算的,10g以後,內存是動態的根據對你使用系統的統計來進行調整的,如果出現問題,這塊不是原因,你之所以db cache還沒有上去,可能是訪問的數據比較少,不過你加大db_cache_size的值,會保留這個內存空間的,但是也是一樣的,數據 load到內存里,才看得到變化。
數據訪問是什麼樣的訪問,你的系統是OLAP還是OLTP,這些應用上的東西對你的決定也有影響的,要謹記,資料庫的優化和維護,不僅僅是DBA來做的。如果是到了只能通過DBA來做這一步的話,就相當於看病已經到了拿手術刀這一步了。你的改變帶來的風險和代價最高。
要想減少磁碟讀,只能增大內存的使用.樓主可以看看這個視圖v$db_cache_size,並執行下面的查詢:
select block_size, size_for_estimate, size_factor, estd_physical_read_factor, estd_physical_reads from v$db_cache_advice;
Oracle在這個視圖中針對db_cache_size的大小會給出一些建議。
下面解釋幾個列的含義
size_for_estimate:估計的cache size大小
size_factor: 估計的cache size大小與當前大小的比值
estd_physical_reads:在估計的cache size大小情況下,會產生的物理讀數量
estd_physical_read_factor:估計的物理讀數量與當前物理讀數量的比值。
例子:
SIZE_FOR_ESTIMATE SIZE_FACTOR ESTD_PHYSICAL_READ_FACTOR ESTD_PHYSICAL_READS

⑶ 怎麼寫一個緩存把從資料庫中的數據放入緩存中,在頁面直接讀取緩存中的數據

先定義成結構,把表裡的欄位存進結構,然後把結構定義成vector,把結構存入vector,也就是緩存了,要的時候取就是了

⑷ thinkphp 載入常用函數和配置文件 會有緩存嗎

一、配置文件設置首先,我們在TP項目配置目錄Config下新建一個配置文件,命名為setting.config.php,這個文件用以保存動態的參數。然後,項目主配置文件Config.php中用合並數組的方式,將setting.config.php合並進來。這樣,在整個項目中,即可調用setting.config.php中的配置參數了。
二、實現動態管理參數在後台,建立一個功能,將setting.config.php的默認值讀出,並顯示在一個表單中。這里可以使用TP的C函數實現。然後,即可在表單中對各個參數的值進行設置。表單提交保存後,將表單提交的值,進行處理,具體代碼如下:setting.config.php文件的結構
<?php
return array(
'setting'=>array(
'tel'=>'400-088-7380',
'qq'=>'88888888',
......
),
);
?>
保存配置參數的操作
function SaveSetting(){
//setting.config.php文件的路徑,通過settingfile_path來設定;
$setfile='./Home'.C('settingfile_path');
$a=C('setting');//將默認配置參數的內容賦值給$a;
$b=array(
'tel'=> $_POST['tel'],
'web'=> $_POST['web'],
........
);
//這里將新的參數值,通過後台的表單提交過來;
$c=array_merge($a,$b);
//將數組$a和$b合並;我們知道,array_merge()函數,可以合並兩個數組,並且如果數組元素具有相同的鍵名,後面的值會覆蓋前面的值(數字鍵名除外);然後,將合並後的數組$c的值進行遍歷後,生成php文件代碼;
$settingstr="<?php \n return array(\n'Setting' =>array(\n";
foreach($c as $key=>$v){
$settingstr.="\t'".$key."'=>'".$v."',\n";
}
$settingstr.="),\n);\n?>\n";
file_put_contents($setfile,$settingstr);//通過file_put_contents保存 setting.config.php文件;

到此,setting.config.php文件的配置參數的值,已經被更新;(Thinkphp3.1版本,已經支持C函數保存設置的參數值,所以,本方法,適合於3.0及以下版本的TP)另外,我們知道TP在第一次運行時會把項目所有的配置文件,配置參數等,生成一個runtime緩存文件,如果我們更新了congfig 的內容,那麼必須刪除項目中的緩存文件後才能生效。為此,我們讓系統自己來清空緩存,更新參數。代碼如下:
//RUNTIME_FILE常量是入口文件中配置的runtimefile的路徑及文件名;
if(file_exists(RUNTIME_FILE)){
unlink(RUNTIME_FILE);//刪除RUNTIME_FILE;
}
光刪除runtime_file還不夠,要清空一下Cache文件夾中的文件;代碼如下:
$cachedir=RUNTIME_PATH."/Cache/";//Cache文件的路徑;
if($dh = opendir($cachedir)){//打開Cache文件夾;
while(($file = readdir($dh))!==false){//遍歷Cache目錄,
unlink($cachedir.$file);//刪除遍歷到的每一個文件;
}
closedir($dh);
}
到此,整個動態配置參數文件,並清空緩存的功能全部實現

⑸ php怎麼讀取設置nginx緩存

nginx緩存
nginx有兩種緩存機制:fastcgi_cache和proxy_cache
下面我們來說說這兩種緩存機制的區別吧
proxy_cache作用是緩存後端伺服器的內容,可能是任何內容,包括靜態的和動態的
fastcgi_cache作用是緩存fastcgi生成的內容,很多情況是php生成的動態內容
proxy_cache緩存減少了nginx與後端通信的次數,節省了傳輸時間和後端帶寬
fastcgi_cache緩存減少了nginx與php的通信次數,更減輕了php和資料庫的壓力。

proxy_cache緩存設置
#註:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
proxy_temp_path/data0/proxy_temp_dir;
#設置Web緩存區名稱為cache_one,內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬碟緩存空間大小為30GB。
proxy_cache_path/data0/proxy_cache_dirlevels=1:2keys_zone=cache_one:200minactive=1dmax_size=30g;

server
{
listen80;
server_namewww.yourdomain.com192.168.8.42;
indexindex.htmlindex.htm;
root/data0/htdocs/www;

location/
{
#如果後端的伺服器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一台伺服器,實現故障轉移。
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_cachecache_one;
#對不同的HTTP狀態碼設置不同的緩存時間
proxy_cache_valid20030412h;
#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
proxy_cache_key$host$uri$is_args$args;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_passhttp://backend_server;
expires1d;
}

#用於清除緩存,假設一個URL為http://192.168.8.42/test.txt,通過訪問http://192.168.8.42/purge/test.txt就可以清除該URL的緩存。
location~/purge(/.*)
{
#設置只允許指定的IP或IP段才可以清除URL緩存。
allow127.0.0.1;
allow192.168.0.0/16;
denyall;
proxy_cache_purgecache_one$host$1$is_args$args;
}

#擴展名以.php、.jsp、.cgi結尾的動態應用程序不緩存。
location~.*.(php|jsp|cgi)?$
{
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_passhttp://backend_server;
}

access_logoff;
}
}

fastcgi_cache緩存設置
#定義緩存存放的文件夾
fastcgi_cache_path/tt/cachelevels=1:2keys_zone=NAME:2880minactive=2dmax_size=10G;
#定義緩存不同的url請求
fastcgi_cache_key"$scheme$request_method$host$uri$arg_filename$arg_x$arg_y";

server{
listen8080;
server_namewww.example.com;
location/{
root/www;
indexindex.htmlindex.htmindex.php;
}

location~(|.php)${
root/www;
fastcgi_pass127.0.0.1:9000;

fastcgi_cacheNAME;
fastcgi_cache_valid20048h;
fastcgi_cache_min_uses1;
fastcgi_cache_use_staleerrortimeoutinvalid_headerhttp_500;

fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;
includefastcgi.conf;
#設置緩存的過程中發現無法獲取cookie,經查需要定義這句話
fastcgi_pass_headerSet-Cookie;
}

log_formataccess'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent"$http_x_forwarded_for';
access_log/httplogs/access.logaccess;
}
總的來說nginx的proxy_cache和fastcgi_cache的緩存配置差不多。
memcache緩存
在討論memcache緩存之前,我們先了解下mysql的內存緩存吧
mysql的內存緩存可以在my.cnf中指定大小:內存表和臨時表不同,臨時表也是存放內存中,臨時表最大的內存需要通過tmp_table_size=128M設定。當數據查過臨時表的最大值設定時,自動轉為磁碟表,此時因需要進行IO操作,性能會大大下降,而內存表不會,內存滿了後,會提示數據滿錯誤。
例:
createtabletest
(
idintunsignednotnullauto_incrementprimarykey
statechar(10),
typechar(20),
datechar(30)
)engine=memorydefaultcharset=utf8
內存表的特性:
1.內存表的表定義存放在磁碟上,擴展名為.frm,所以重啟不會丟失
2.內存表的數據是存放在內存中,重啟會丟失數據
3.內存表使用一個固定的長度格式
4.內存表不支持blob或text列,比如varchar與text欄位就不會被支持
5.內存表支持auto_increment列和對可包含null值的列的索引
6.內存表不支持事物
7.內存表是表鎖,當修改頻繁時,性能可能會下降
轉自:

http://www.nowamagic.net/librarys/veda/detail/1405

下面我們來看看memcache,相對而言mysql的內存表限制較多。
memcache的用途
1.提高系統的並發能力
2.減輕資料庫的負擔
註:memcachelinux系統32位只支持4G內存,同時memcache最長保存時間為30天。

⑹ form表單中怎麼實現緩存點擊下一步之後再點擊上一步 前面輸入的數據不存在了

可以使用不刷新頁面兒的方案
不要使用原生的表單進行提交,原生表單提交後都是要刷新頁面兒的,
可以通過ajax進行提交。這樣提交後不會刷新頁面,輸入的數據還存在用戶體驗更好。

⑺ 啟用資料庫欄位緩存有什麼好處

thinkphp 3.2關閉/開啟欄位緩存實例

通常每個模型類是操作某個數據表,在大多數情況下,系統會自動獲取當前數據表的欄位信息。

系統會在模型首次實例化的時候自動獲取數據表的欄位信息(而且只需要一次,以後會永久緩存欄位信息,除非設置不緩存或者刪除),如果是調試模式則不會生成欄位緩存文件,則表示每次都會重新獲取數據表欄位信息。

欄位緩存保存在Runtime/Data/_fields/ 目錄下面,緩存機制是每個模型對應一個欄位緩存文件(注意:並非每個數據表對應一個欄位緩存文件),命名格式是:
資料庫名.模型名(小寫).php

例如:

demo.user.php // User模型生成的欄位緩存文件
demo.article.php // Article模型生成的欄位緩存文件

欄位緩存包括數據表的欄位信息、主鍵欄位和是否自動增長,如果開啟欄位類型驗證的話還包括欄位類型信息等等,無論是用M方法還是D方法,或者用原生的實例化模型類一般情況下只要是不開啟調試模式都會生成欄位緩存(欄位緩存可以單獨設置關閉)。

可以通過設置DB_FIELDS_CACHE 參數來關閉欄位自動緩存,如果在開發的時候經常變動資料庫的結構,而不希望進行數據表的欄位緩存,可以在項目配置文件中增加如下配置:

// 關閉欄位緩存
'DB_FIELDS_CACHE'=>false

注意:調試模式下面由於考慮到數據結構可能會經常變動,所以默認是關閉欄位緩存的。

如果需要顯式獲取當前數據表的欄位信息,可以使用模型類的getDbFields方法來獲取當前數據對象的全部欄位信息,例如:

$User = M('User');
$fields = $User->getDbFields();

如果你在部署模式下面修改了數據表的欄位信息,可能需要清空Data/_fields目錄下面的緩存文件,讓系統重新獲取更新的數據表欄位信息,否則會發生新增的欄位無法寫入資料庫的問題。

如果不希望依賴欄位緩存或者想提高性能,也可以在模型類裡面手動定義數據表欄位的名稱,可以避免IO載入的效率開銷,例如:

namespace Home\Model;
use Think\Model;
class UserModel extends Model {
protected $fields = array('id', 'username', 'email', 'age');
protected $pk = 'id';
}

pk屬性定義當前數據表的主鍵名,默認值就是id,因此如果是id的話可以無需定義。

除了可以設置數據表的欄位之外,我們還可以定義欄位的類型,用於某些驗證環節。例如:

namespace Home\Model;
use Think\Model;
class UserModel extends Model {
protected $fields = array('id', 'username', 'email', 'age',
'_type'=>array('id'=>'bigint','username'=>'varchar','email'=>'varchar','age'=>'int')
);
}

⑻ 表單method屬性get請求和post那個可以緩存

Get是用來從伺服器上獲得數據,而Post是用來向伺服器上傳遞數據。Get
是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多伺服器、
代理伺服器或者用戶代理都會將請求URL記錄到日誌文件中,然後放在某個地方,這樣就
可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,
一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。