一、redis 簡介 1、什麼是 redis? redis 是一個開源免費的高性能的 key - value 資料庫。 支持數據持久化,即可以將記憶體的數據存儲在磁碟中,重啟服務後可以再次載入磁碟中的數據並使用。 支持多種類型,比如:String(字元串)、List(列表)、Set(集合)、zset( ...
一、redis 簡介
1、什麼是 redis?
redis 是一個開源免費的高性能的 key - value 資料庫。
支持數據持久化,即可以將記憶體的數據存儲在磁碟中,重啟服務後可以再次載入磁碟中的數據並使用。
支持多種類型,比如:String(字元串)、List(列表)、Set(集合)、zset(有序集合)、Hash(散列) 等。
支持數據備份,主從模式的數據備份(master - slave)。
redis 所有操作都是原子性的,即要麼成功執行,要麼不執行。
官網:
https://redis.io/
2、安裝 redis
(1)使用 docker 安裝、使用 redis
【參考地址:(Linux(CentOS7) 上安裝 docker)】 https://www.cnblogs.com/l-y-h/p/12622730.html#_label0 【參考地址:(ocker 安裝 Redis)】 https://www.cnblogs.com/l-y-h/p/12622730.html#_label6
(2)Centos7 編譯安裝 redis 5.0.8
Step1:下載 redis 包。
【官網下載地址:】 https://redis.io/download http://download.redis.io/releases/redis-5.0.8.tar.gz 【在 Linux 內部直接下載:】 [root@localhost local]# wget http://download.redis.io/releases/redis-5.0.8.tar.gz
Step2:解壓、編譯。
【解壓:】 [root@localhost local]# tar -zxvf redis-5.0.8.tar.gz 【進入解壓後的目錄,並編譯(前提 系統內部已經安裝了 gcc、make 等程式):】 [root@localhost local]# cd redis-5.0.8/ [root@localhost local]# make 【編譯完後:進入 src 目錄,可以看到 redis-server、redis-cli 等程式】 [root@localhost redis-5.0.8]# cd src/
Step3:開啟服務程式(redis-server),並使用內置客戶端( redis-cli) 進行交互。
【開啟服務程式(redis-server):】 方式一: ./redis-server 根據預設配置文件啟動 redis 方式二: ./redis-server ../redis.conf 根據指定的配置文件(可以自定義配置文件位置)啟動 redis 【開啟客戶端進行交互(redis-cli):】 ./redis-cli
通過 xShell 使用一個連接以前臺模式啟動一個 redis 服務。
另開一個 xShell 連接,執行 redis-cli,在安裝包的 src 目錄下 執行 ./redis-cli。
Step4:關閉服務
【在 redis-cli 中輸入指令】
[root@localhost src]# ./redis-cli shutdown
3、redis 可視化工具下載
(1)官網下載(要收費的)
地址:https://redisdesktop.com/pricing
(2)破解版下載(白嫖)
鏈接:https://pan.baidu.com/s/1v3ZJEdzEGBIf5gYGsyhRBw
提取碼:ubhz
或者
http://www.downza.cn/soft/210734.html
二、redis 中 鍵(key) 相關命令
命令不區分大小寫,但數據區分大小寫。
1、keys(用於查看 key 列表)
【格式:】 keys pattern 用於查找 匹配 pattern 格式的 key 【舉例:】 127.0.0.1:6379> keys *
2、del(用於刪除某個鍵)
【格式:】 del key 當 key 存在時,刪除 key,返回 1。key 不存在時,忽略,返回 0。 【舉例:】 127.0.0.1:6379> del a
3、exists(判斷某個鍵是否存在)
【格式:】 exists key 用於判斷某個 key 是否存在,存在返回 1,不存在返回 0 【舉例:】 127.0.0.1:6379> exists b
4、type(返回指定 key 存儲值的類型)
【格式:】 type key 用於判斷某個 key 的類型 【舉例:】 127.0.0.1:6379> type c
5、rename、renamenx(用於給 key 修改名字)
【rename 格式:】 rename old_key_name new_key_name 用於修改 key 名。 註: 若 old_key_name 不存在時,會返回一個錯誤。 若 new_key_name 存在時,則覆蓋舊值,返回 OK。 【renamenx 格式:】 renamenx old_key_name new_key_name 用於修改 key 名 註: 若 old_key_name 不存在時,會返回一個錯誤。 若 new_key_name 存在時,則不會修改,返回 0。 【舉例:】 127.0.0.1:6379> rename a e 127.0.0.1:6379> renamenx a e
6、randomkey(隨機返回當前庫的一個 key)
【格式:】 randomkey 隨機返回當前庫中的 一個 key,若當前庫沒有數據,則返回 null。 【舉例:】 127.0.0.1:6379> randomkey
三、redis 數據類型 -- String 以及常用命令
1、String(字元串)
最基本的 類型,一個 key 對應 一個 value。
是二進位安全的,可以存儲任何數據(比如圖片),存儲最大值為 512 MB。
2、set(給指定 key 設置一個 String 類型的 value,無視類型直接覆蓋)
【格式:】 set key value 給 key 設置一個 value 值。 【舉例:】 127.0.0.1:6379> set b world
3、get(獲取指定 key 的 value 值)
【格式:】 get key 用於返回 key 的值, 註: 若 key 不存在,則返回 null, 若 key 存儲的不是 string 型數據,則返回一個錯誤 【舉例:】 127.0.0.1:6379> get b
4、getrange(截取 key 存儲的 value 的指定位置的字元串)
【格式:】 getrange key start end 截取字元串,包括 start、end(從 0 開始計數)。 【舉例:】 127.0.0.1:6379> getrange a 0 -1 127.0.0.1:6379> getrange a 3 7
5、getset(設置指定 key 的 value 值)
【格式:】 getset key value 設置指定 key 的 value 值 註: 當 key 不存在時,返回 null 當 key 的 value 不是 string 型時,返回 一個錯誤(與 set 有區別)。 【舉例:】 127.0.0.1:6379> getset a world
6、mget(一次獲取多個 key 的 value 值)
【格式:】 mget key1 [key2] 一次獲取多個 key 的值 註: 若 key 的 value 不屬於 string,會返回 null。 若 key 不存在,返回 null。 【舉例:】 127.0.0.1:6379> mget a b
7、mset、msetnx(一次設置多個 key - value 鍵值對)
【mset 格式:】 mset key1 value1 [key2 value2] 一次設置多個 key - value 鍵值對 【msetnx 格式:】 msetnx key1 value1 [key2 value2] 一次設置多個 key - value 鍵值對 註: key 不存在時才能成功設置。 【舉例:】 127.0.0.1:6379> mset a hello b world 127.0.0.1:6379> msetnx c java d python
8、setnx(當 key 不存在時,設置值)
【格式:】 setnx key value 添加一個 從不存在的 key - value 鍵值對 註: 若 key 存在,則不會設置 value 值,返回 0. 若 key 不存在,則設置 value 值,返回 1.
9、append(給指定 key 的 value 追加字元串)
【格式:】 append key value 給指定 key 追加字元串 註: 若 key 不存在,則等同於 set key value. 若 key 存在,則 向其 value 末尾 追加 字元串。 【舉例:】 127.0.0.1:6379> append a world
10、incr、incrby、decr、decrby(增加、減少 數值類型的 value 值)
【格式:】 incr key 給 key 的 value 加 1 incrby key value 給 key 的 value 加 指定的 value decr key 給 key 的 value 減 1 decrby key value 給 key 的 value 減 指定的 value 註: value 的值必須是能轉為 數值 型的字元串才可以成功執行 【舉例:】 127.0.0.1:6379> incr b 127.0.0.1:6379> decr b 127.0.0.1:6379> incrby b 20 127.0.0.1:6379> decrby b 10
11、strlen(獲取指定 key 的 value 字元串的長度)
【格式:】 strlen key 獲取 指定 key 的 value 存儲的 字元串的長度 【舉例:】 127.0.0.1:6379> strlen a
四、redis 數據類型 -- Hash 以及常用命令
1、Hash(散列、哈希)
是一個 string 類型 key(指哈希表名) 的 field - value 集合。適合用於存儲對象。
可以存儲 2^32 -1 個 key - value 鍵值對。
2、hkeys(獲取指定哈希表 key 的 所有的欄位 field)
【格式:】 hkeys key 用於獲取指定 key 的所有 field。 註: 若 key 不存在,則提示一個空列表信息。 【舉例:】 127.0.0.1:6379> hkeys test
3、hset(給 哈希表中的 欄位 賦值)
【格式:】 hset key field value 給 key 這個哈希表的 field 欄位 賦值 為 value。 註: 若 key 不存在,則會創建。 若 field 重覆,則新值會覆蓋舊值。 【舉例:】 127.0.0.1:6379> hset test a helloworld
4、hmset(同時設置 多個 field - value 到指定的 key 中)
【格式:】 hmset key field1 value1 [field2 value2] 同時設置多個 field - value 對到 哈希表 key 中 註: 若 field 重覆,則新值覆蓋舊值。 【舉例:】 127.0.0.1:6379> hmset test a hello d world
5、hget、hmget、hgetall(獲取哈希表 key 的 field - value值)
【hget 格式:】 hget key field 用於返回 指定哈希表 key 中指定 欄位 field 的 value 值 【hmget 格式:】 hmget key field1 [field2] 用於一次返回一個或多個 field 的 value 值 【hgetall 格式:】 hgetall key 返回指定 key 下所有 的 field -value 【舉例:】 127.0.0.1:6379> hget test a 127.0.0.1:6379> hmget test a b c e 127.0.0.1:6379> hgetall test
6、hvals(獲取指定 key 下所有的 field 對應的 value)
【格式:】 hvals key 返回指定 key 下所有的 field 對應的 value 值 【舉例:】 127.0.0.1:6379> hvals test
7、hlen(獲取指定 key 中 field 的數量)
【格式:】 hlen key 獲取 指定 哈希表 key 中 field 的總數 【舉例:】 127.0.0.1:6379> hlen test
8、hdel (刪除指定 key 中一個或多個 field)
【格式:】 hdel key field1 [field2] 刪除指定哈希表 key 中 指定的 field 欄位 【舉例:】 127.0.0.1:6379> hdel test a
9、hexists(判斷指定 key 中是否存在 field)
【格式:】 hexists key field 判斷指定哈希表 key 中是否存在 field,不存在返回 0,存在返回 1。 【舉例:】 127.0.0.1:6379> hexists test a
五、redis 數據類型 -- List 以及常用命令
1、List(列表)
是字元串 的列表,按照插入順序排序,一個 key 對應 多個 value。
可以存儲 2^32 - 1 個 value 元素。
2、lpush、lpushx(將一個或多個值插入列表的頭部)
【lpush 格式:】 lpush key value1 [value2] 註: 將 value 插入 列表的頭部,若 key 不存在,則創建一個 key 【lpushx 格式:】 lpush key value1 [value2] 註: 將 value 插入 列表的頭部,若 key 不存在,則添加失效,並返回一個 空列表信息。 【舉例:】 127.0.0.1:6379> lpush test 1 2 127.0.0.1:6379> lpushx test 3 4
3、rpush、rpushx(將一個或多個值插入列表的尾部)
【rpush 格式:】 rpush key value1 [value2] 註: 將 value 插入 列表的頭部,若 key 不存在,則創建一個 key 【rpushx 格式:】 rpush key value1 [value2] 註: 將 value 插入 列表的頭部,若 key 不存在,則添加失效,並返回一個 空列表信息。 【舉例:】 127.0.0.1:6379> rpush test 1 2 127.0.0.1:6379> rpushx test 3 4
4、lrange(返回指定範圍的 list 列表)
【格式:】 lrange key start end 註: 返回指定範圍 內的 list 列表,其中 -1 表示倒數第一個數,0 表示第一個數 【舉例:】 127.0.0.1:6379> lrange test 0 -1 127.0.0.1:6379> lrange test -3 3
5、llen(獲取列表的長度)
【格式:】 llen key 註: 返回一個列表的長度,若 key 不存在,則返回 0 。 【舉例:】 127.0.0.1:6379> llen test
6、lindex(用於獲取列表中指定下標的元素)
【格式:】 lindex key index 註: 返回 list 中指定下標 index 的元素,其中 -1 表示倒數第一個數,0 表示第一個數 【舉例:】 127.0.0.1:6379> lindex test 0 127.0.0.1:6379> lindex test -1
7、lpop(從列表頭部移除第一個元素)
【格式:】 lpop key 從 key 頭部移除第一個元素,key不存在時返回 null 【舉例:】 127.0.0.1:6379> lpop test
8、rpop(從列表的尾部移除最後一個元素)
【格式:】 rpop key 從 key 尾部移除最後一個元素,key不存在時返回 null 【舉例:】 127.0.0.1:6379> rpop test
9、lset(通過 列表的下標去設置 元素值)
【格式:】 lset key index value 註: 設置 list 中指定下標 index 的元素,其中 -1 表示倒數第一個數,0 表示第一個數 【舉例:】 127.0.0.1:6379> lset test 0 hello
10、ltrim(截取列表中指定範圍的元素)
【格式:】 ltrim key start end 註: 截取列表中指定範圍的元素,不在範圍的元素會刪除。其中 -1 表示倒數第一個數,0 表示第一個數 【舉例:】 127.0.0.1:6379> ltrim test 1 3
六、redis 數據類型 -- Set 以及常用命令
1、Set(集合)
是字元串 的無序集合,元素不重覆且無序。
一個 key 對應 多個 value。可以存儲 2^32 -1 個 value 元素。
2、sadd(添加一個或多個元素到集合中)
【格式:】 sadd key value1 [value2] 註: 添加一個或多個元素到集合key 中,重覆元素不會被添加。 【舉例:】 127.0.0.1:6379> sadd test 1 2 3 1 2
3、smembers(用於返回集合的所有元素)
【格式:】 smembers key 註: 返回指定集合 key 的所有元素,若 key 不存在,返回 (empty list or set) 【舉例:】 127.0.0.1:6379> smembers test
4、scard(用於返回當前集合中元素的個數)
【格式:】 scard key 註: 返回指定 key 的元素的個數。 【舉例:】 127.0.0.1:6379> scard test
5、sismember(判斷集合中是否包含某元素)
【格式:】 sismember key value 註: 判斷集合 key 中是否存在 某元素 value 【舉例:】 127.0.0.1:6379> sismember test 4
6、srem(移除一個或多個元素)
【格式:】 srem key value1 [value2] 註: 移除一個或多個元素,根據值來匹配。 【舉例:】 127.0.0.1:6379> srem test 2 3 4
7、spop(隨機移除一個或多個元素)
【格式:】 spop key [count] 註: count 表示 移除的元素個數,預設為 1,若 key 不存在,返回 null。 【舉例:】 127.0.0.1:6379> spop test 6 127.0.0.1:6379> spop test
8、srandmember(隨機返回一個或多個元素)
【格式:】 srandmember key [count] 【舉例:】 127.0.0.1:6379> srandmember test 4
9、smove(將指定元素從一個集合移動到另一個集合)
【格式:】 smove source destination member 註: 將 member 元素 從 source 集合 移動到 destination 集合中。 【舉例:】 127.0.0.1:6379> smove test test1 4
七、redis 數據類型 -- zSet 以及常用命令
1、zset(有序集合)
是字元串 的有序集合,元素不重覆且有序,
內部維護一個 double 類型的分數,根據該值對元素進行排序,double 值可以重覆。
一個 key 對應 多個 value。可以存儲 2^32 - 1 個 value 元素。
2、zadd(添加一個或多個元素到集合中)
【格式:】 zadd key score1 value1 [score2 value2] 註; score 為指定的整數或分數,用來排序。 添加一個或多個元素到集合中,若已存在元素,則會覆蓋舊的 score。 【舉例:】 127.0.0.1:6379> zadd test 2 hello 1 world 3 helloworld
3、zrange、zrevrange(返回指定範圍的集合元素)
【zrange 格式:】 zrange key start end [withscores] 註: 按照元素的 score 增序排列。 withscores 表示顯示 元素的 score。 其中 -1 表示倒數第一個數,0 表示第一個數。 【zrevrange 格式:】 zrevrange key start end [withscores] 註: 按照元素的 score 降序排列。 【舉例:】 127.0.0.1:6379> zrange test 0 -1 127.0.0.1:6379> zrange test 0 -1 withscores
4、zcard、zcount(獲取集合中元素的個數)
【zcard 格式:】 zcard key 註: 獲取指定 key 的所有元素的個數 【zcount 格式:】 zcount key min max 註: 獲取指定 key 的 指定 分數範圍內的元素的個數。 【舉例:】 127.0.0.1:6379> zcard test 127.0.0.1:6379> zcount test 1.5 4.6
5、zscore(返回指定元素的 score 分數值)
【格式:】 zscore key member 註: 返回指定 member 在 指定 key 中的 score. 【舉例:】 127.0.0.1:6379> zscore test hello
6、zrem(移除一個或多個元素)
【格式:】 zrem key member1 [member2] 註: 從集合中移除 一個 或 多個 member。 【舉例:】 127.0.0.1:6379> zrem test world hello
7、zrank、zrevrank(獲取指定元素在集合中的排名)
【zrank 格式:】 zrank key member 註: 按照 score 升序排列,並返回 member 在此序列中的排名。 其中,0 表示第一名,依次遞增。 【zrevrank 格式:】 zrevrank key member 註: 按照 score 降序排列,並返回 member 在此序列中的排名。 【舉例:】 127.0.0.1:6379> zrank test java 127.0.0.1:6379> zrevrank test java
8、zremrangebyrank、zremrangebyscore(按照指定的範圍移除元素)
【zremrangebyrank 格式:】 zremrangebyrank key start end 註: 按照 排名,移除 [start, end] 區間內的元素。 【zremrangebyscore 格式:】 zremrangebyscore key min max 註: 按照 分數值,移除 [min, max] 區間內的元素 【舉例:】 127.0.0.1:6379> zremrangebyrank test1 2 3 127.0.0.1:6379> zremrangebyscore test2 2 100