redisql 試用


redisql 是一個redis 模塊,可以讓redis 支持sql 查詢,基於rust編寫

具有以下特性

  • 快速,每秒130k的插入
  • 使用標准sql
  • 容易操作,基於redis,使用標准的redis 二進制文件(主要還是4.0 的的模塊機制)
  • 使用簡單,可以使用基於redis 的任務語言綁定
  • stream cache 查詢數據,可以基於redis 的stream 進行擴展
  • 完整的json 支持
  • 全文檢索支持

    使用場景

  • 存儲暫態數據
  • 做為主數據庫(通過aof 以及rdb進行持久化)

簡單使用

推薦的是redis> 5.0 ,為了簡單我使用的是docker 運行,但是因為官方docker 鏡像有一個遙測服務,
但是這個服務網絡不通,所以注釋了,源碼參考redisql

  • docker-compose 文件
 
version: "3"
services: 
  db:
    image: dalongrong/redisql
    ports: 
    - "6379:6379"
  • 啟動
docker-compose up -d
  • 效果
Attaching to redisql_db_1
db_1 | 1:C 01 Aug 2019 11:49:56.140 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
db_1 | 1:C 01 Aug 2019 11:49:56.140 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
db_1 | 1:C 01 Aug 2019 11:49:56.140 # Configuration loaded
db_1 | 1:M 01 Aug 2019 11:49:56.142 * Running mode=standalone, port=6379.
db_1 | 1:M 01 Aug 2019 11:49:56.142 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
db_1 | 1:M 01 Aug 2019 11:49:56.142 # Server initialized
db_1 | 1:M 01 Aug 2019 11:49:56.142 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
db_1 | 1:M 01 Aug 2019 11:49:56.142 * Module 'rediSQL' loaded from /usr/local/lib/libredis_sql.so
db_1 | 1:M 01 Aug 2019 11:49:56.142 * Ready to accept connections
  • 基本數據庫操作
redis-cli 
127.0.0.1:6379> REDISQL.CREATE_DB DB
OK
127.0.0.1:6379> REDISQL.EXEC DB "CREATE TABLE foo(A INT, B TEXT);"
1) DONE
2) (integer) 0
127.0.0.1:6379> REDISQL.EXEC DB "INSERT INTO foo VALUES(3, 'bar');"
1) DONE
2) (integer) 1
127.0.0.1:6379> REDISQL.EXEC DB "SELECT * FROM foo;"
1) 1) (integer) 3
   2) "bar"
127.0.0.1:6379> REDISQL.EXEC DB "CREATE TABLE baz(C INT, B TEXT);"
1) DONE
2) (integer) 0
127.0.0.1:6379> REDISQL.EXEC DB "INSERT INTO baz VALUES(3, 'aaa');"
1) DONE
2) (integer) 1
127.0.0.1:6379> REDISQL.EXEC DB "INSERT INTO baz VALUES(3, 'bbb');"
1) DONE
2) (integer) 1
127.0.0.1:6379> REDISQL.EXEC DB "INSERT INTO baz VALUES(3, 'ccc');"
1) DONE
2) (integer) 1
127.0.0.1:6379> REDISQL.EXEC DB "SELECT * FROM foo, baz WHERE foo.A = baz.C;"
1) 1) (integer) 3
   2) "bar"
   3) (integer) 3
   4) "aaa"
2) 1) (integer) 3
   2) "bar"
   3) (integer) 3
   4) "bbb"
3) 1) (integer) 3
   2) "bar"
   3) (integer) 3
   4) "ccc"
127.0.0.1:6379> 

說明

官方文檔也提供了各種語言綁定的使用,還是很不錯的

參考資料

https://github.com/rongfengliang/rediSQL
https://cloud.docker.com/u/dalongrong/repository/docker/dalongrong/redisql
https://github.com/RedBeardLab/rediSQL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM