概述
redis 是一種支持分佈式的非關係型數據庫,數據是保存在內存中,同時 redis 可以定時把內存數據同步到磁盤,即可以將數據持久化,並且 Redis 比 memcached 支持更多的數據結構。
redis 和 memcached
memcached | redis | |
---|---|---|
類型 | 純內存數據庫 | 內存磁盤同步數據庫 |
數據類型 | 在定義 value 時就要固定數據類型 | 不需要 |
虛擬內存 | 不支持 | 支持 |
過期策略 | 支持 | 支持 |
存儲數據安全 | 不支持 | 可以將數據同步到dump.db中 |
災難恢復 | 不支持 | 可以將磁盤中的數據恢復到內存中 |
分佈式 | 支持 | 主從同步 |
訂閱與發佈 | 不支持 | 支持 |
redis 在 ubuntu 系統中的安裝與啓動
- 安裝:
sudo apt-get install redis-server
- 卸載:
sudo apt-get purge --auto-remove redis-server
- 啓動:redis 安裝後,默認會自動啓動,可以通過以下命令查看:
ps aux|grep redis
- 可以通過以下命令進行手動啓動:
sudo service redis-server start
- 停止:
sudo service redis-server stop
redis 在 windows 系統中的安裝與啓動
- 下載:redis 官方是不支持 windows。而微軟的開源部門將 redis 移植到了 windows 上。下載地址爲 github
- 安裝
- 運行:終端定位到 Redis 的安裝目錄,
redis-server.exe redis.windows.conf
- 連接:redis 和 mysql 以及 mongo 是一樣的,都提供了一個客戶端進行連接。輸入命令 redis-cli (前提是 redis 安裝路徑已經加入到環境變量中了)就可以連接到 redis 服務器了
其他機器訪問本機 redis 服務器
想要讓其他機器訪問本機的 redis 服務器。那麼要修改 redis.conf 的配置文件,將 bind 改成 bind [自己的ip地址或者 0.0.0.0],其他機器才能訪問。
注意:bind 綁定的是本機網卡的 ip 地址,而不是想讓其它機器連接的 ip 地址。如果有多塊網卡,那麼可以綁定多個網卡的 ip 地址。如果綁定到額是 0.0.0.0,那麼意味着其他機器可以通過本機所有的 ip 地址進行訪問。
redis 常見操作
對 redis 的操作可以用兩種方式,第一種方式採用 redis-cli,第二種方式採用編程語言,比如 Python、PHP 和 JAVA 等。
- 啓動 redis:
sudo service redis-server start
- 連接上 redis-server:
redis-cli -h [ip] -p [端口]
- 添加:
set key value
如:
set username xiaotuo
將字符串值 value 關聯到 key。如果 key 已經持有其他值,set 命令就覆寫舊值,無視其類型。並且默認的過期時間是永久,即永遠不會過期。
-
刪除:
del key
-
設置過期時間:
expire key timeout(單位爲秒)
也可以在設置值的時候,一同指定過期時間:
set key value EX timeout
-
查看過期時間:
ttl key
-
查看當前 redis 中的所有 key:
keys *
列表操作:
- 在列表左邊添加元素:
lpush key value
將值 value 插入到列表 key 的表頭。如果 key 不存在,一個空列表會被創建並執行 lpush 操作。當 key 存在但不是列表類型時,將返回一個錯誤。
- 在列表右邊添加元素:
rpush key value
將值 value 插入到列表 key 的表尾。如果 key 不存在,一個空列表會被創建並執行 RPUSH 操作。當 key 存在但不是列表類型時,返回一個錯誤。
-
查看列表中的元素:
lrange key start stop
返回列表 key 中指定區間內的元素,區間以偏移量 start 和 stop 指定,如果要左邊的第一個到最後的一個 lrange key 0 -1。
-
移除並返回列表 key 的頭元素:
lpop key
- 移除並返回列表的尾元素:
rpop key
-
移除並返回列表 key 的中間元素:
lrem key count value
將刪除 key 這個列表中,count 個值爲 value 的元素。
-
指定返回第幾個元素:
lindex key index
將返回 key 這個列表中,索引爲 index 的這個元素。
-
獲取列表中的元素個數:
llen key
-
刪除指定的元素:
lrem key count value
根據參數 count 的值,移除列表中與參數 value 相等的元素。
count
的值可以是以下幾種:- count > 0:從表頭開始向表尾搜索,移除與 value 相等的元素,數量爲 count
- count < 0:從表尾開始向表頭搜索,移除與 value 相等的元素,數量爲 count 的絕對值
- count = 0:移除表中所有與 value 相等的值。
set 集合操作
- 添加元素:
sadd set value1 value2....
- 查看元素:
smembers set
- 移除元素:
srem set member...
- 查看集合中的元素個數:
scard set
- 獲取多個集合的交集:
sinter set1 set2
- 獲取多個集合的並集:
sunion set1 set2
- 獲取多個集合的差集:
sdiff set1 set2
hash 哈希操作
-
添加一個新值:
hset key field value
將哈希表 key 中的域 field 的值設爲 value。
如果 key 不存在,一個新的哈希表被創建並進行 HSET 操作。如果域 field 已經存在於哈希表中,舊值將被覆蓋。
-
獲取哈希中的 field 對應的值:
hget key field
-
刪除 field 中的某個 field:
hdel key field
-
獲取某個哈希中所有的 field 和 value:
hgetall key
-
獲取某個哈希中所有的 field:
hkeys key
-
獲取某個哈希中所有的值:
hvals key
-
判斷哈希中是否存在某個 field:
hexists key field
-
獲取哈希中總共的鍵值對:
hlen field
事務操作
-
Redis 事務可以一次執行多個命令,事務具有以下特徵:
- 隔離操作:事務中的所有命令都會序列化、按順序地執行,不會被其他命令打擾。
- 原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。
- 開啓一個事務:
multi
以後執行的所有命令,都在這個事務中執行的。
-
執行事務:
exec
會將在 multi 和 exec 中的操作一併提交。
-
取消事務:
discard
會將 multi 後的所有命令取消。
-
監視一個或者多個 key:
watch key...
監視一個(或多個) key,如果在事務執行之前這個(或這些) key被其他命令所改動,那麼事務將被打斷。
-
取消所有 key 的監視
unwatch
發佈/訂閱操作:
- 給某個頻道發佈消息:
publish channel message
- 訂閱某個頻道的消息:
subscribe channel