2012年1月30日 星期一

python 與 Redis 資料庫初探

image

個最近想提高公司網站的效能,之前為求先縮短第一版開發的時程,先用MySQL來實作session store,始終覺得有殺雞用牛刀的感覺。便著手研究目前非常流行的Redis,它是一種No SQL及In-Memory 的資料庫,就一個倶有Key-Value結構等特性的資料庫而言,十分適合用來做Session Store使用。


安裝

為Redis 的網站說明做的不錯,照著下載區及其安裝說明,三步驟安裝:

$ wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
$ tar xzf redis-2.4.6.tar.gz
$ cd redis-2.4.6
$ make

網站上建議使用2.4 版,筆者下載2.4.6 穩定版來安裝。

目前開發環境在Mac OS X Lion及 Ubuntu 11.10上,安裝都十分順利;但無法在cygwin中編譯成功。安裝完成後,預設無密碼。直接執行 redis-server 啟動:

/home/ubuntu# redis-server /usr/local/etc/redis.conf
[1264] 30 Jan 14:35:26 * Server started, Redis version 2.4.6
[1264] 30 Jan 14:35:26 * DB loaded from disk: 0 seconds
[1264] 30 Jan 14:35:26 * The server is now ready to accept connections on port 6379
[1264] 30 Jan 14:35:26 - DB 0: 1 keys (0 volatile) in 4 slots HT.
[1264] 30 Jan 14:35:26 - 0 clients connected (0 slaves), 717560 bytes in use
[1264] 30 Jan 14:35:31 - DB 0: 1 keys (0 volatile) in 4 slots HT.
[1264] 30 Jan 14:35:31 - 0 clients connected (0 slaves), 717560 bytes in use

接著使用redis-cli 便可直接連上redis-server。(詳參照data types intro)

$ redis-cli
redis 127.0.0.1:6379> get a
"1"
redis 127.0.0.1:6379> set a 2
OK
redis 127.0.0.1:6379> get a
"2"
redis 127.0.0.1:6379> incr a
(integer) 3
redis 127.0.0.1:6379> get a
"3"
redis 127.0.0.1:6379> quit

python redis.py

sudo pip install redis
sudo easy_install redis

使用python import redis 來測試看看

ubuntu@redis:~$ python
Python 2.7.2+ (default, Oct  4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> r = redis.StrictRedis(host='localhost', port=6379, db=0)
>>> r.get('a')
'3'
>>> r.set('b', 10)
True
>>> r.incr('b')
11
>>> r.get('b')
'11'
>>>

就session store或engine 有關django的目前找下列三種:








尚未進行測試,之後會陸續評估看看那個較為適合目前的使用情境。

小結

redis安裝起來,十分簡單,也很容易使用。

目前在github 上,有許多python 相關的函式庫可供使用,值得花些時間學習看看。

相關問題?

如何停止redis-server?

強烈建議請使用shutdown 命令,來完成將記憶體中尚未資料儲存至硬碟中,否則資料可能遺失。

原因為redis 設定中,有命令save 命令在特定時間內有變更多少筆鍵值才會進行儲存。

預設設定檔如下:

#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving at all commenting all the "save" lines.
save 900 1
save 300 10
save 60 10000

安全性?

在redis.conf 中,可利用requirepass 來設定,就官方文件要求需要設定強度較高且長度較長的密碼,

因若redis在較高效能的機器上,同時大量執行的密碼驗證(auth)命令時,可達15K次每秒,可能在極短時間內破解強度較弱的密碼。

就筆者看來,最好使用 iptables 或host ACL方法,只授權必要使用redis server的相關伺服器接入。

Ubuntu 11.10 執行警告訊息

[1063] 30 Jan 14:17:26 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

請務必設定vm.overcommit_memory=1的值,不可忽略。

2012年1月29日 星期日

開發環境 BeagleBone A8 實測Linaro-nano

最近實測了一塊Linaro活動贈送的開發板BeagleBone Rev.A3 (PDF英文手冊開發說明)。其中,內附一個4GB的micro SD 卡。

IMG_1622 IMG_1623

SD卡已預先載好Linaro-nano (Linux linaro-nano 3.1.0+ #1 Tue Nov 15 15:51:15 CET 2011 armv7l armv7l armv7l GNU/Linux)
驅動程式在Windows XP 上有些小問題。
請依下照步驟安裝,(其他系統安裝,詳參閱原英文說明)
  • 解壓縮BONE_DRV.exe
  • 先連接usb連接線
  • 硬體安裝精靈,並手動指定解壓目錄,進行安裝USB序列埠驅動程式及FTDI虛擬COM Port驅動程式。(詳見文後05-20更新)
IMG_1624

成功安裝後,可在裝置管理員中看到下列資訊(以筆者電腦環境,為COM6)。
image

接著開啟’超級終端機’,設定如下圖示:
beaglebone_com6_setup

重新接上USB線,即可看到,Linaro 開機畫面。
beaglebone_install_openssh_server_done

預設Linaro-nano環境,非常陽春,需要手動設定網路,來安裝需要的開發工具。
ifconfig eth0 192.168.253.10 netmask 255.255.255.0
route add -net 0.0.0.0 gw 192.168.253.1
echo "nameserver 192.168.253.1" > /etc/resolv.conf

以安裝openssh-server 為例
apt-get install openssh-server

beaglebone_install_openssh_server_start ssh_connected


小結

Linaro-nano 使用gcc 4.6.1,若要利用桌機進行開發,則需使用最新版本的Ubuntu11.10 做為來cross-compile開發環境,稍有不便。
就另一方面來說,目前CPU A8,256MB 記憶體, SD卡容量達4G,足夠用以直接在實驗板上開發部分小型程式。
筆者將所需要的程式一一安裝好後,體積小的它,直接可以作為移動的ARM小型開發平台,十分方便。

更新2012-05-20
回覆Henry讀者:筆者是在Windows XP 上,安裝BONE_DRV.exe
先使用USB連接BeagleBone到主機
假設解壓目錄為 C:\temp\BONE_DRV
會出現 尋找新增硬體 (選取不,連線到windows update)-> 選取從清單或特定位置安裝
1. 控制台->新增硬體精靈
 ->選擇BONE_DRV\FTDI 目錄進行安裝->出現尚未通相容性測試警告(如下圖示)
 
-> 選取繼續安裝->完成。
2. 接著又會跳出一次來安裝 XDS100v2 compatible USB Serial Converter B, 再安裝一次即可。