`
mtnt2008
  • 瀏覽: 327330 次
  • 性別: Icon_minigender_1
  • 來自: 北京
文章分類
社區版塊
存檔分類
最新評論

愛奇藝開源lua-resty-couchbase

閱讀更多

lua-resty-couchbase

??? 使用cosocket純lua實現的couchbase的client,已經在愛奇藝重要的播放服務穩定運行5年多,線上支持峰值QPS達到20W,在OpenResty架構下面,可以直接從nginx上面訪問CouchBase.

??? 開源地址:https://github.com/iqiyi/lua-resty-couchbase


一個例子

??? lua_package_path "/path/to/lua-resty-couchbase/lib/?.lua;;";

??? lua_shared_dict ldict 10m;

??? server {
??????? location /test {
??????????? content_by_lua_block {
??????????????? local cjson = require "cjson"
??????????????? local couchbase = require "resty.couchbase"

??????????????? local function get_from_service()
??????????????????? -- nothing
??????????????????? return "{}"
??????????????? end

??????????????? local conf = {
??????????????????? hosts = { "10.10.10.1:8091", "10.10.10.2:8091"},
??????????????????? bucket_name = "test",
??????????????????? bucketpwd = "test-password",
??????????????? }

??????????????? local client, err = couchbase:create_client(conf.hosts, conf.bucket_name, conf.bucketpwd)
??????????????? if client == nil then
??????????????????? ngx.log(ngx.ERR, err)
??????????????? end

??????????????? -- test set_timeout
??????????????? client:set_timeout(500)

??????????????? local key = "test-key"
??????????????? local key1 = "test-key1"
??????????????? -- test set
??????????????? client:set(key, "{}")
??????????????? client:set(key1, "{}")

??????????????? -- test get_bluk
??????????????? local values, err = client:get_bluk(key, key1)
??????????????? if not err then
??????????????????? ngx.say(cjson.encode(values))
??????????????? end

??????????????? -- test n1ql
??????????????? local result, err = client:query('SELECT country FROM `travel-sample` WHERE name = "Excel Airways";')
??????????????? if not err then
??????????????????? ngx.say(result)
??????????????? end

??????????????? -- test get get_from_replica
??????????????? local value, err = client:get(key)
??????????????? if value then
??????????????????? ngx.say(value)
??????????????? else
??????????????????? if err then
??????????????????????? if string.find(err, "Not found") then
??????????????????????????? ngx.log(ngx.INFO, "key not found: ", key, " error: ", err)
??????????????????????????? ngx.say(get_from_service())
??????????????????????? else
??????????????????????????? local value_bak, err_bak = client:get_from_replica(key)
??????????????????????????? if value_bak then
??????????????????????????????? ngx.log(ngx.WARN, "get key from replica success: ", key)
??????????????????????????????? ngx.say(value_bak)
??????????????????????????? else
??????????????????????????????? ngx.log(ngx.ERR, "get replica error: ", key, "error: ", err_bak)
??????????????????????????????? ngx.say(get_from_service())
??????????????????????????? end
??????????????????????? end
??????????????????? end
??????????????? end

??????????????? -- test close
??????????????? client:close()

??????????? }
??????? }
??? }



關于OpenResty

??? OpenResty? 是一個基于 Nginx 與 Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用于方便地搭建能夠處理超高并發、擴展性極高的動態 Web 應用、Web 服務和動態網關。

??? OpenResty? 通過匯聚各種設計精良的 Nginx 模塊(主要由 OpenResty 團隊自主開發),從而將 Nginx 有效地變成一個強大的通用 Web 應用平臺。這樣,Web 開發人員和系統工程師可以使用 Lua 腳本語言調動 Nginx 支持的各種 C 以及 Lua 模塊,快速構造出足以勝任 10K 乃至 1000K 以上單機并發連接的高性能 Web 應用系統。

??? OpenResty? 的目標是讓你的Web服務直接跑在 Nginx 服務內部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對 HTTP 客戶端請求,甚至于對遠程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進行一致的高性能響應。

0
1
分享到:
評論
Global site tag (gtag.js) - Google Analytics 开心农场种蔬菜赚钱 四川金7乐走势图表 黑龙江p62开奖公告 3d最精准专家杀码号 北京pc蛋蛋28最准的技巧 云南十一选五的走势图 天中图库好运彩精布衣 山东期货配资网 股票配资平台哪个好选九梦财富 天津快乐10分专家 黑龙江十一选五走势 十一选五直选前三江苏 股票配资啥意思 股票融资买入额 中特是什么意思 急速赛车 余男 十一选五河北