---
# System prepended metadata

title: Redis
tags: [MySQL補充, Redis]

---

###### 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