javascript
SpringBoot系列: Redis基础
============================
Redis 安裝
============================
redis 采用單線程多路復用的機制提供并發訪問, 用到了 Linux 的一些獨有的特性, 所以官網不提供 Windows 版本, 微軟和開源界曾經將 redis 移植到 Windows, 在 github 上可以下載使用, 不過最后的 release 版本是 2016 年 7 月的 3.2.100 版, 貌似已經棄坑了. 不過作為開發環境已經是足夠了.
下載地址: https://github.com/MicrosoftArchive/redis/tags
Windows 下安裝后, 會自動創建一個 redis 的服務名. 該服務的命令其實是:
C:\Program Files\Redis\redis-server.exe" --service-run "C:\Program Files\Redis\redis.windows-service.conf"
可以看到關鍵的配置參數是在 redis.windows-service.conf 文件中.
redis 默認的端口是 6379, 這個端口一般不需要修改, 默認訪問是不需要密碼的, 所以需要加一個登陸口令.
修改文件 redis.windows-service.conf 的 requirepass 參數, 配置登陸口令:
requirepass Redis!123
?
============================
Redis 部署形式
============================
單機:
主從: 讀寫分離, 多節點數據備份
哨兵: 高可用, 讀寫分離
集群: 數據分片, 擴展存儲能力, 同時包含主從及哨兵特性
一般生產環境, 使用哨兵就夠了, 機器需要的不多, 同時運維也比較省心.
?
============================
redis 的基本概念
============================
redis 是 KV 數據庫, redis 默認情況下共有 16 個數據庫, 不同數據庫內的 key 是可以重名的, 在同一個數據庫中 key 是唯一的.
修改文件 redis.windows-service.conf 的 databases 參數, 設置數據庫的數量.
databases 16
dbsize 命令, 可以獲取當前 db 的 key 的數量.
select 命令, 切換當前數據庫, 登陸后默認進入的是 index 為 0 的 db.
flushdb 命令, 清空當前數據庫中所有的 key.
keys * 命令,列出所有的key
type key 命令,得到key的類型(string或list/hash或set等)
?
key 的命名規范:
redis 的 key 名稱可以非常隨意的, key 名可以是任意英文字母和字符的組合, 包括中文也可以作為 key 名, 所以項目中, 最好確立 key 的命名規范, 比如:
namespace:keyname
namespace:keygroup.keyname
============================
redis-cli 常用命令
============================
redis-cli 工具是自帶的命令行工具, 有很好的命令提示功能, 使用 tab 鍵可以補齊命令名, redis-cli 的命令是大小寫不敏感的.
登陸命令行是:
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6379 -a "Redis!123"
redis-cli -h 127.0.0.1 -p 6379 --raw
其中, -a 參數指定密碼
--raw 參數, 只有帶上該參數, 命令行工具才能顯示中文字符, 否則將顯示\xaa 這樣的格式.
使用 ping 命令, 檢查連接是否 OK.
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
使用 auth 命令, 輸入登陸口令:
127.0.0.1:6379> auth "Redis!123"
OK
============================
redis 基本的 key value 操作
============================
使用 set 命令, 設置一個 key-value
127.0.0.1:6379> set platform:info "simple information"
OK
使用 get 命令, 獲取 key 的 value
127.0.0.1:6379> get platform:info
"simple information"
使用 mset 命名, 一次性設置多個 key-value 對.
127.0.0.1:6379> mset platform:version 1 platform:info "simple information"
OK
使用 mget 命令, 一次性獲取多個 key 對應的 values
127.0.0.1:6379> mget platform:version platform:info
1) "1"
2) "simple information"
對于數值型的字符串, 可以使用下面命令進行加減操作
decr 自減 1
incr 自增 1
decrby 減去一個整數, 可正可負
incrby 加上一個整數, 可正可負
incrbyfloat 加上一個浮點數, 可正可負
使用 keys 命令查詢 Redis 中的所有 key, keys 支持通配符 * 和 ?.
使用 exists 命令可以判斷指定的 key 是否存在, 返回值為 0 代表不存在, 1 代表存在. exists 命令可以有多個 keys 作為參數, 返回值是所有單個返回值之和.
使用 del 命令 可以刪除指定的 key, 返回值為 1 代表成功, 0 代表不成功, 不成功很可能是因為指定的 key 不存在. del 命令也可以有多個 keys 作為參數, 返回值是所有單個返回值之和.
使用 expire 命令設定要給 key 的過期時間 (單位為秒), 返回值為 1 代表成功.
127.0.0.1:6379> expire a 10
(integer) 1
使用 ttl 命令可以查詢指定 key 的剩余存活時間 (秒), 范圍值為-1 代表該 key 永遠有效, -2 代表該 key 已經被刪除.
============================
redis List 操作
============================
除了字符串可以作為 value, list 也可以作為 key 的 value, Redis 的 List 是通過鏈表實現的, 所以插入元素速度很快, 但按照索引檢索的速度較慢.
rpush 命令, 可以將多個值插入到 list 的尾部.
127.0.0.1:6379> rpush platform:history 20180721 20180722
(integer) 2
lpush 命令, 可以將多個值插入到 list 的頭部.
127.0.0.1:6379> lpush platform:versions 1 2 3 4
(integer) 4
lrange 命令, 可以返回指定下表范圍的元素值, 第 1 個參數是 key, 第 2 個參數是起始下標, 第三個參數是結束下標.
lrange 命令中的下標也可以用負數標識, -1 代表倒數第一個下標, -2 代表倒是第 2 個下標, 和 python 語言類似.
127.0.0.1:6379> lrange platform:history 0 1
1) "20180721"
llen 命令, 可以求得 list 的長度
rpop 命令是從 list 尾部取出一個元素, 如果 list 已經為空, 則返回 nil.
lpop 命令是從 list 頭部取出一個元素, 如果 list 已經為空, 則返回 nil.
blpop 命令是以阻塞的形式從 list 尾部取一個元素, 如果 list 已經為空, 該命令一致處于等待, 直到列表中有了新的元素.
brpop 命令是以阻塞的形式從 list 尾部取一個元素, 如果 list 已經為空, 該命令一致處于等待, 直到列表中有了新的元素.
blpop 和 brpop 命令常用于消息服務需求, 他們能自動監聽隊列并取出一個元素.
blpop 和 brpop 命令最后一個參數是阻塞超時秒數, 0 為永遠不超時; 前面的參數是 list key 清單, 可以是多個 key, 命令取出第一個非空 list 列表的元素.
127.0.0.1:6379> blpop platform:history platform:history2 0
1) "platform:history"
2) "20180723"
============================
redis Hash 操作
============================
Redis 本身是一個 Key-Value 數據庫, 而 Value 也可以是一個 dictionary, 為了避免混淆, 將dictionary 中的 key 用 field 術語表示. Spring Boot 就使用該結構保存 Spring Session 數據, 以實現 web 系統的水平擴展.
hset key field value 命令, 設定 field 值.
hget key field 命令, 獲取 field 值.
hexists key field 命令, 判斷 field 是否存在.
hkeys key 命令, 列出指定 key 的 hashmap 的所有 field.
hgetall key 命令, 返回所有字段名和字段值.
hdel key field 命令, 刪除指定 field.
hincrby key field byvalue 命令, 字段值加上一個整數
hincrbyfloat key field byvalue 命令, 字段值加上一個浮點數.
============================
redis Set 操作
============================
Redis 也存儲 set 型和 sorted set 型值, 可以進行集合的交集和并集操作, 這里僅介紹 set 型操作.
sadd key member1 [member2..] 命令, 向集合中增加元素
smembers key 命令, 列出集合的所有元素
sinter key1 key2 命令, 兩集合求交集.
sunion key2 key2 命令, 兩集合求并集.
sdiff key1 key2 命令, 兩集合求差集.
sinter key1 key2 key3 命令, 將 key2 和 key3 的交集存到 key1 中.
sunion key2 key2 key3 命令, 將 key2 和 key3 的并集的交集存到 key1 中.
sdiff key1 key2 key3 命令, 將 key2 和 key3 的差集的交集存到 key1 中.
smove key1 key2 memeber 命令, 從 key1 中移動 member 到 key2 集合.
sismember key memeber 命令, 判斷元素是否在集合中.
?
============================
Redis的細節資料
============================
https://www.w3cschool.cn/redis_all_about/redis_all_about-sfc726u6.html
http://doc.redisfans.com/
Redis創建高可用集群教程【Windows環境】https://blog.csdn.net/u010648555/article/details/79427608
總結
以上是生活随笔為你收集整理的SpringBoot系列: Redis基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot项目启动优化
- 下一篇: NFS笔记