跳到主要內容

Redis @ SmartOS

Redis也是一套NoSQL資料庫,使用key-value的方式來儲存string, hashes, lists, sets...
下面是官方介紹Redis的一段說明:

Redis is an open source, advanced key-value store. It is often referred to as a data structure server since keys can containstringshasheslistssets and sorted sets.

一如往常,SmartOS上安裝Redis只有兩個步驟:

# pkgin search redis
php5-redis-5.2.17.2.1.3  PHP extension for Redis
php53-redis-5.3.6.2.1.3  PHP extension for Redis
redis-2.2.14         Persistent key-value database with built-in net interface

=: package is installed and up-to-date
<: package is installed but newer version is available
>: installed package has a greater version than available package

# pkgin install redis-2.2.14
calculating dependencies... done.

nothing to upgrade.
1 packages to be installed: redis-2.2.14 (406K to download, 1316K to install)

proceed ? [y/N] y
downloading packages...
downloading redis-2.2.14.tgz:  203Kbps 100%
error log can be found in /var/db/pkgin/err.log
installing packages...
installing redis-2.2.14...
redis-2.2.14: Creating group ``redis''
redis-2.2.14: Creating user ``redis''
redis-2.2.14: copying /opt/local/share/examples/redis/redis.conf.example to /opt/local/etc/redis.conf
===========================================================================
The following files should be created for redis-2.2.14:

        /etc/rc.d/redis (m=0755)
            [/opt/local/share/examples/rc.d/redis]

===========================================================================
//////////////////////////////////////////////////////////////////////////////

This package is SMF enabled, which means you can use SMF to 'enable',
'disable' or 'restart' the persistent daemon process, e.g.:

  svcadm enable redis

The SMF manifest was automatically imported now.

See our wiki on what's SMF and how to use it to your advantage:


//////////////////////////////////////////////////////////////////////////////
processing local summary...
updating database: 100%
marking redis-2.2.14 as non auto-removable

因Redis預設在安裝時候設定成SMF服務,安裝完成後可以使用svcadm啓動他:

svcadm enable redis

Redis預設提供了一個CLI介面,安裝完成後,可透過redis-cli啓動

# redis-cli 
redis 127.0.0.1:6379
redis 127.0.0.1:6379> ?
redis-cli 2.2.14
Type: "help @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" to get a list of possible help topics
      "quit" to exit

PS: 在官方文件中有提供簡單的教程:http://redis.io/topics/data-types-intro

這邊實作一下於Redis置入string物件的CLI方式

redis 127.0.0.1:6379> set mykey "simon1"
OK
redis 127.0.0.1:6379> get mykey
"simon1"
redis 127.0.0.1:6379> set mykey2 "simon2"
OK
redis 127.0.0.1:6379> get mykey2
"simon2"

同時,Redis也提供許多語言的連接實作,可在這邊找到:http://redis.io/clients
而官網建議的clinet實作for Node.js版本為:https://github.com/mranney/node_redis
下面是node_redis client的範例: (redis.print為callback function)

#redis_example.js 
var redis = require("redis"),
    client = redis.createClient();

client.on("error", function (err) {
    console.log("Error " + err);
});

client.set("string key", "string val", redis.print); //儲存string型態物件
client.get("string key", redis.print); //取回string型態物件

client.hset("hash key", "hashtest 1", "some value", redis.print); //儲存Hash型態物件
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
client.hkeys("hash key", function (err, replies) { //取回Hash型態物件值
    console.log(replies.length + " replies:");
    replies.forEach(function (reply, i) {
       console.log("    " + i + ": " + reply);
    });
    client.quit();
});

範例執行結果:

#node redis_example.js
Reply: OK
Reply: string val
Reply: 1
Reply: 1
2 replies:
    0: hashtest 1
    1: hashtest 2

承上,redis為與installed server互動的一個NoSQL資料形態,網路上介紹的大部份是屬於執行於redis server上的應用,目前關於redis的server不多的應用不多,相關的實作資訊如下:
以上,Redis是一套不錯的NoSQL系統,相信在許多應用系統上可以使用Redis實作,但因為他相對為較基礎之資料結構實作,不像資料庫系統擁有許多像cluster, load balance, replicate, grid...的功能,但是卻擁有他單純的好處。


這個網誌中的熱門文章

Oracle LISTAGG

同事介紹的一個Oracle的好用查詢:LISTAGG
SELECT A.GROUP_ID,A.KEY, LISTAGG(A.VALUE,'; ')WITHINGROUP(ORDERBYA.VALUE)as GG  fromSYS_PROPERTIESaGROUP byA.GROUP_ID,A.KEY
LISTAGG可以將group後的結果會總顯示於一個欄位 上述SQL原本A.VALUE會是一個row一個row的排列 使用LISTAGG之後,可以將A.VALUE顯示在同一個row中 並且可以指定間隔符號(在此設定為';') 針對某一些報表查詢非常有用唷 :D

使用GCP Cloud Builder建置CI/CD Flow

服務的建置通常是持續性的作業,而部署則一般是專案初期建置一次,未來可以沿用該部署設定... 這樣的流程走向自動化,在Container的環境又更是重要... 本篇介紹一下,在Google雲端,我們可以搭配Source Repository與Build Trigger等服務來完成服務的自動建置與部屬,讓封裝Container與部署到Container Engine的動作可以一氣呵成...
首先幾單瞭解一下一個Container Engine服務的建置與部屬過程...
使先,建立Container Engine Cluster,透過GCP Winzard可以很快速地開立您的GKE Cluster…

假設您的cluster是叫做demo-cluster,則可以透過下面的指令來跟GKE建立連線
$ gcloud container clusters get-credentials demo-cluster --zone asia-east1-a
這串指令不用記ㄛ~可以在Cluster的頁面找到他...

點選複製,即可貼到您的Terminal執行...

跟GKE建立鏈結後,接下來可以部署您的城市,這邊我們以我的一個範例程式Demoweb (https://github.com/peihsinsu/demoweb) 為例,

這個專案中,包含幾個重要結構:
app/ : 放置您的程式,在Dockerfile中會將該資料匣複製到Docker Image中 k8s/ : 放置k8s的deployment與service描述檔 Dockerfile : 封裝docker的描述檔,會以node.js的image為基礎來建置執行環境 cloudbuild.yaml : Google Cloud Build Trigger的步驟描述檔

使用 minikube 輕鬆上手 kubernetes

安裝minikube
macOS只需要透過brew即可快速安裝...
brew cask install minikube
Linux環境可以直接下載執行檔,放到環境變數可以吃到的路徑即可...
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && \ chmod +x minikube && \
sudo mv minikube /usr/local/bin/
Windows的下載網址如下: https://storage.googleapis.com/minikube/releases/latest/minikube-windows-amd64.exe
如果您的kubectl尚未安裝,可以直接使用google cloud sdk來安裝:
curl https://sdk.cloud.google.com | bash
gcloud components install kubectl
安裝完成後,原則上minikube會在本地端加入minikube的k8s context,我們可以透過下面指令來使用該context…
kubectl config use-context minikube
然後,可檢查一下您的minikube node是否正常運作....