天天看點

Redis安裝與常用指令整合NoSQL概述Redis概述Redis安裝資料類型Redis keys 指令Redis string字元串 指令Redis hash哈希 指令Redis list清單指令Redis set集合指令Redis sorted set有序集合指令Redis HyperLogLog 指令Redis 釋出訂閱指令Redis 事務指令Redis Lua腳本指令Redis 伺服器指令Redis 資料備份與恢複Redis 安全Redis 性能測試Redis 用戶端連接配接Redis管道技術

參考:

  1. Redis 教程 - 菜鳥教程

NoSQL概述

NoSQL = not only sql

非關系型資料庫

優勢:

高并發讀寫 high performance
海量資料的高效率存儲和通路 huge storage
高可擴充性和高可用性 high scalability high availability      

NoSQL四大分類

鍵值對(key-value) redis
列存儲  hbase
文檔資料庫 mongodb 
圖形資料庫        

NoSQL特點

易擴充
靈活的資料模型
大資料量,高性能
高可用      

Redis概述

高性能鍵值對資料庫

鍵值資料類型

字元串
清單
散列
集合
有序集合      

應用場景

緩存
任務隊列
網站通路統計
資料過期處理
分布式叢集架構中的session分離      

Redis安裝

環境搭建

虛拟機 VMware 10.0.2
Linux centOS-6.5
ssh用戶端 secureCRT 7.3 secureFX 7.3      

Linux 下安裝

下載下傳位址:http://redis.io/download
Linx線上安裝gcc,>yum install gcc-c++
filezilla将 redis壓縮包 上傳至linux
tar -zxvf redis壓縮包名稱
make編譯
拷貝 redis.conf
前端啟動 
後端啟動 修改redis.conf -> deamonize yes
啟動服務:/bin/redis-server ./redis.conf
檢視啟動情況:ps -ef | grep -i redis
停止:redis-cli shutdown
啟動用戶端:./bin/redis-cli      

Window 下安裝

下載下傳位址:https://github.com/MSOpenTech/redis/releases      

mac 下安裝

執行 brew install redis

背景服務啟動 brew services start redis
重新開機服務:brew services restart redis
或者直接啟動:redis-server /usr/local/etc/redis.conf
打開用戶端 redis-cli      

通用設定

# 外網通路,注釋本機通路
# bind 127.0.0.1

# 設定背景啟動
daemonize yes

# 設定密碼
requirepass <password>
      

開機自啟

vim /etc/init.d/redis

#!/bin/bash
#chkconfig: 22345 10 90
#description: Start and Stop redis

# ===== 修改為自己的參數 ======
REDISPORT=6379
EXEC=/opt/redis-5.0.5/src/redis-server
CLIEXEC=/opt/redis-5.0.5/src/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/opt/redis-5.0.5/redis.conf"
# ===========

case "$1" in
    start)
        if [ -f $PIDFILE ];then
            echo "$PIDFILE exists,process is already running or crashed"
        else
            echo "Starting Redis server..."
            $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ];then
            echo "$PIDFILE does not exist,process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    *)
        echo "Please use start or stop or restart as first argument"
        ;;
esac      

啟動指令

# 腳本權限
chmod +x /etc/init.d/redis

# 配置redis開機啟動
chkconfig redis on

# 把腳本添加到系統服務清單
chkconfig --add redis
chkconfig redis on
chkconfig --list   //檢視所有注冊的腳本檔案

# 啟動服務
service redis start      

參考

  1. Redis配置開機自啟動
  2. 設定redis服務開機自啟動

連結測試:

# 本地用戶端 
$ redis-cli  

# 登入後驗證
> auth <password>

# 遠端伺服器 
$ redis-cli -h host -p port -a password

> ping
PONG
退出 $ quit
      

簡單使用

127.0.0.1:6379> set name imool
OK
127.0.0.1:6379> get name
"imool"
127.0.0.1:6379> keys *
1) "name"
2) "a"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> keys *
1) "a"

select num 切換資料庫
move key db 移動      

資料類型

string(字元串)set key value ; get key
hash(哈希)hmset key field value; hget key field; hgetall key
list(清單)lpush key value; lrange key start stop
set(集合)sadd key member; smembers key
zset(sorted set:有序集合)zadd key score member; zrangebyscore key min max      

中文文檔:

http://www.redis.cn/commands.html

Redis keys 指令

KEYS pattern  查找 key(所有 keys *, 部分keys xx?)
DEL key  删除 key
DUMP key  傳回 key 序列化的值
EXISTS key  檢查 key 是否存在
MOVE key db  移動 key
EXPIRE key seconds  為 key 設定過期時間
PERSIST key  移除 key 的過期時間
TTL key  傳回 key 的剩餘生存時間(秒s)(TTL, time to live)
RANDOMKEY 随機傳回一個 key
RENAME key newkey 修改 key 的名稱
RENAMENX key newkey 僅當 newkey 不存在時,将 key 改名為 newkey
TYPE key 傳回 key 類型
flushdb //删除目前資料庫中的所有Key
flushall //删除所有資料庫中的key      

Redis string字元串 指令

SET key value 設定值
GET key  擷取值
GETSET key value 擷取舊值,設定新值
SETRANGE key offset value 覆寫字元串值
GETRANGE key start end 傳回子字元串
MSET key value [key value ...] 同時設定多個值
MGET key1 [key2..] 擷取多個值
SETEX key seconds value  設定值和過期時間(秒s)
SETNX key value  不存在時設定值
MSETNX key value [key value ...]  同時設定多個值,當且僅當所有key都不存在
INCR key 增一
DECR key  減一
INCRBY key increment  加值
DECRBY key decrement 減值
INCRBYFLOAT key increment  加浮點值
STRLEN key  傳回長度
APPEND key value  末尾追加      

Redis hash哈希 指令

HSET key field value 設定字段值
HGET key field 擷取字段的值
HMSET key field1 value1 [field2 value2 ] 設定多個字段的值
HMGET key field1 [field2] 擷取多個字段的值
HSETNX key field value 不存在時,設定字段的值
HGETALL key 擷取所有字段和值
HKEYS key 擷取所有字段
HVALS key 擷取所有值
HLEN key 擷取字段的數量
HDEL key field1 [field2] 删除多個字段
HEXISTS key field 檢視字段是否存在
HINCRBY key field increment 字段加值
HINCRBYFLOAT key field increment 字段加浮點值      

Redis list清單指令

LPUSH key value1 [value2]  頭部插入
RPUSH key value1 [value2]  尾部插入
LPOP key 頭部彈出
RPOP key 尾部彈出
LSET key index value 設定值
LINSERT key BEFORE|AFTER pivot value  插入元素
LINDEX key index  擷取元素
LRANGE key start stop 擷取多個元素(全部 0 -1)
LREM key count value  移除元素(count:>0從前往後,=0所有,<0從後往前)
LLEN key  擷取長度
LTRIM key start stop 修剪,保留區間
LPUSHX key value  插入到已存在的清單頭部
RPUSHX key value  插入到已存在的清單尾部
BLPOP key1 [key2 ] timeout 頭部彈出,沒有會阻塞
BRPOP key1 [key2 ] timeout 尾部彈出,沒有會阻塞
RPOPLPUSH source destination 彈出一個值,插入到另外一個清單中并傳回
BRPOPLPUSH source destination timeout 彈出一個值,插入到另外一個清單中并傳回,如果沒有會阻塞      

Redis set集合指令

SADD key member1 [member2] 添加成員
SREM key member1 [member2] 移除成員
SCARD key 擷取成員數
SMEMBERS key 所有成員
SISMEMBER key member 成員檢查
SRANDMEMBER key [count] 随機傳回
SPOP key 随機彈出
SMOVE source destination member 移動
SDIFF key1 [key2] 差集
SINTER key1 [key2] 交集
SUNION key1 [key2] 并集
SDIFFSTORE destination key1 [key2] 差集并存儲
SINTERSTORE destination key1 [key2]  交集并存儲
SUNIONSTORE destination key1 [key2] 并集存儲       

Redis sorted set有序集合指令

ZADD key score1 member1 [score2 member2] 添加成員
ZCARD key 擷取成員數
ZSCORE key member 成員分數值
ZRANK key member 成員索引
ZREVRANK key member 成員的排名,分數值遞減(從大到小)排序
ZCOUNT key min max 分數區間的成員數
ZLEXCOUNT key min max 字典區間内成員數
ZINCRBY key increment member 增加分數值
ZREM key member [member ...] 移除成員
ZREMRANGEBYLEX key min max 移除字典區間成員
ZREMRANGEBYRANK key start stop 移除排名區間成員
ZREMRANGEBYSCORE key min max 移除分數區間成員
ZRANGE key start stop [WITHSCORES] 索引區間成員
ZRANGEBYLEX key min max [LIMIT offset count]  字典區間成員
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 分數區間成員
ZREVRANGE key start stop [WITHSCORES] 索引區間成員,分數從高到底
ZREVRANGEBYSCORE key max min [WITHSCORES] 分數區間内成員,分數從高到低排序
ZINTERSTORE destination numkeys key1 [key2...]  交集并存儲
ZUNIONSTORE destination numkeys key [key ...] 并集并存儲      

Redis HyperLogLog 指令

PFADD key element [element ...] 添加元素
PFCOUNT key [key ...] 傳回基數估算值
PFMERGE destkey sourcekey [sourcekey ...] 合并      

Redis 釋出訂閱指令

SUBSCRIBE channel [channel ...] 訂閱頻道
UNSUBSCRIBE [channel [channel ...]] 退訂頻道
PUBLISH channel message 發送資訊
PUBSUB subcommand [argument] 檢視訂閱與釋出系統狀态 channels
PSUBSCRIBE pattern [pattern ...]  訂閱模式頻道
PUNSUBSCRIBE [pattern] 退訂模式頻道      

Redis 事務指令

階段: 開始事務 -> 指令入隊 -> 執行事務

MULTI 标記一個事務塊的開始
EXEC 執行所有事務塊内的指令
DISCARD 取消事務
WATCH key [key ...] 監視key ,如果改動,那麼事務将被打斷
UNWATCH 取消 WATCH 指令對所有 key 的監視      

Redis Lua腳本指令

EVAL script numkeys key [key ...] arg [arg ...] 執行腳本
EVALSHA sha1 numkeys key [key ...] arg [arg ...] 執行腳本
SCRIPT EXISTS script [script ...] 是否在緩存
SCRIPT FLUSH 移除所有腳本
SCRIPT KILL 殺死運作的腳本
SCRIPT LOAD script 将腳本添加到緩存中,但并不立即執行這個腳本      

Redis 伺服器指令

CLIENT SETNAME connection-name 設定目前連接配接的名稱
CLIENT GETNAME 擷取連接配接的名稱
CLIENT LIST 擷取連接配接到伺服器的用戶端連接配接清單
CLIENT KILL [ip:port] [ID client-id] 關閉用戶端連接配接
CLIENT PAUSE timeout 在指定時間内終止運作來自用戶端的指令
DBSIZE 傳回目前資料庫的 key 的數量
FLUSHDB 删除目前資料庫的所有key
FLUSHALL 删除所有資料庫的所有key
COMMAND 擷取 Redis 指令詳情數組
COMMAND COUNT 擷取 Redis 指令總數
COMMAND GETKEYS 擷取給定指令的所有鍵
TIME 傳回目前伺服器時間
COMMAND INFO command-name [command-name ...] 擷取指定 Redis 指令描述的數組
CONFIG SET parameter value 修改 redis 配置參數,無需重新開機
CONFIG GET parameter 擷取指定配置參數的值
CONFIG REWRITE 對啟動 Redis 伺服器時所指定的 redis.conf 配置檔案進行改寫
CONFIG RESETSTAT 重置 INFO 指令中的某些統計資料
DEBUG OBJECT key 擷取 key 的調試資訊
DEBUG SEGFAULT 讓 Redis 服務崩潰
INFO [section] 擷取 Redis 伺服器的各種資訊和統計數值
LASTSAVE 傳回最近一次 Redis 成功将資料儲存到磁盤上的時間,以 UNIX 時間戳格式表示
MONITOR 實時列印出 Redis 伺服器接收到的指令,調試用
ROLE 傳回主從執行個體所屬的角色
SHUTDOWN [NOSAVE] [SAVE] 異步儲存資料到硬碟,并關閉伺服器
CLUSTER SLOTS 擷取叢集節點的映射數組
SLAVEOF host port 将目前伺服器轉變為指定伺服器的從屬伺服器(slave server)
SLOWLOG subcommand [argument] 管理 redis 的慢日志
SYNC 用于複制功能(replication)的内部指令
SAVE 同步儲存資料到硬碟
BGSAVE 在背景異步儲存目前資料庫的資料到磁盤
BGREWRITEAOF 異步執行一個 AOF(AppendOnly File) 檔案重寫操作      

Redis 資料備份與恢複

資料備份 
    SAVE
    BGSAVE

恢複資料
    CONFIG GET dir  擷取 redis 目錄
    将備份檔案 (dump.rdb) 移動到 redis 安裝目錄并啟動服務即可
    如果不能恢複需要先将 dump.rdb 檔案拷貝到其他地方,再拷貝回備份目錄
持久化
    RDB 指定時間間隔,資料快照寫入磁盤 SAVE
    AOF 日志形式記錄  appendonly - >yes      

Redis 安全

CONFIG get requirepass  檢視是否設定密碼
CONFIG set requirepass password 設定密碼
AUTH password 驗證      

Redis 性能測試

redis-benchmark [option] [option value] 性能測試      

Redis 用戶端連接配接

config get maxclients 最大連接配接數      

Redis管道技術

指令一次性向 redis 服務送出,并最終一次性讀取所有服務端的響應
管道技術最顯著的優勢是提高了 redis 服務的性能