###### tags: `Redis` `MySQL補充` # Redis ## 功能特性 1. 目前支援字串、Hash、List、Set、Sorted Set 2. 資料都儲存在記憶體 3. 可非同步寫入硬碟,同時不影響服務的持續提供 4. 可設定存活時間(一個禮拜、一個月) 無提供Windows版本,以Linux、Unix為主 ## Redis & Memcached 效率Memcached>Redis Redis有持久化,Memcached無 # MySQL補充 ## 問題:1 大小問題 新增資料進入table的BLOB欄位內發生資料過大問題, 錯誤訊息「Data truncation: Data too long for column ‘image’ at row 1」 解決方法: 將BLOB欄位改成較大型別: TINYBLOB : maximum length of 255 bytes BLOB : maximum length of 65,535 bytes MEDIUMBLOB : maximum length of 16,777,215 bytes LONGBLOB : maximum length of 4,294,967,295 bytes ## 問題: 2 MySQL匯入資料時要注意資料是否過大問題(例如:圖檔): 可能產生「packet bigger than ‘max_allowed_packet’ bytes」錯誤問題, 解決方式: Windows: Windows:將「my.ini」(C:\ProgramData\MySQL\MySQL Server 5.x\my.ini)內容「max_allowed_packet」的值加大,例如改成「max_allowed_packet=500M」(更改完設定一定要重啟MySQL) Mac OS: 修改my.cnf(就是Windows的my.ini)內容「max_allowed_packet」的值加大,例如改成「max_allowed_packet=500M」(更改完設定一定要重啟MySQL) 也可透過Workbench修改下列設定: 1. 開啟Workbench > Server > Options File > Networking > max_allowed_packet > 改成500M 2. 開啟Workbench > Server > Options File > InnoDB > innodb_log_file_size > 改成256M ## 安裝Redis,匯入Eclipse 可直接使用try{ @#$%^&*(*&^%$#@) }finally{ if(jedis != null) jedis.close(); }來保證關閉連線 ## Redis Key&Value特性 set同key會覆蓋舊有資料, 若get不存在的key則會得到null值 特性與map相同 strlen為檔案大小,而不是文字長短(java字串的length為字元數量) getrange([key],7,11)從key值取得value,從開始位置到結束位置都拿字串,與java有點不同(java結束位置-1) getrange([key],-18,-14)可從後面往前拿,-號會從最後面開始,字元順序不會依拿的順序而影響,EX:Redis不會變sideR ### Redis中的JSON 載入jar檔後即可使用 透過JSON達成前後分離的效果 ### Base64 Base64建議在少張照片時使用,若多張照片使用,會讓檔案變大。 java8以後有API可以使用 redis中可用incr +數值 decr -數值 ### List LinkedList & ArrayList差異 LinkedList容易從中間安插資料或移除資料,但索引較差 ArrayList索引值佳,但不適合插入資料在中間 ### Hash jedis.hmset(key,map)後面只能放map Map中的ketSet為key的集合,而非設定key ### Zset Zset與Set差異為Zset有"有序性"的特性 Zset與Linked,Linked對中間元素處裡較慢,Zset速度較快 詳見JDBC P.70