安裝
下載并安裝
$ wget http://download.redis.io/releases/redis-6.0.8.tar.gz
$ tar xzf redis-6.0.8.tar.gz
$ cd redis-6.0.8
$ make
make完后 redis-6.0.8目錄下會(huì)出現(xiàn)編譯后的redis服務(wù)程序redis-server, 還有用于測(cè)試的客戶端程序redis-cli, 兩個(gè)程序位于安裝目錄 src 目錄下誊垢。啟動(dòng)redis服務(wù)
- 用的是默認(rèn)配置
$ cd src
$ ./redis-server
- 使用自己的配置文件
$ cd src
$ ./redis-server /root/redis-6.0.8/redis.conf
- 端口號(hào)沖突:
Could not create server TCP listening socket 127.0.0.1:6379: bind: Address already in use
$ ps -ef | grep redis
$ kill -9 10096
重新啟動(dòng)redis
$ ./redis-server /root/redis-6.0.8/redis.conf
內(nèi)存警告
overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to/etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
解決辦法:將vm.overcommit_memory = 1添加到/etc/sysctl.conf中,然后執(zhí)行sysctl -p生效配置衔峰。警告
The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
解決辦法:將net.core.somaxconn = 1024添加到/etc/sysctl.conf中鸽素,然后執(zhí)行sysctl -p生效配置卧斟。警告
you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue 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 thesetting after a reboot. Redis must be restarted after THP is disabled.
解決辦法:將echo never > /sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,然后執(zhí)行source /etc/rc.local生效配置。-
啟動(dòng)客戶端
$ ./redis-cli
$ ./redis-cli --raw
支持中文
退出
127.0.0.1:6379> exit
選擇數(shù)據(jù)庫
Redis默認(rèn)有從0-15,16個(gè)數(shù)據(jù)庫螃壤,默認(rèn)選擇0號(hào)數(shù)據(jù)庫阅畴。
選擇2號(hào)數(shù)據(jù)庫:
$ select 2
Redis數(shù)據(jù)類型
Redis支持五種數(shù)據(jù)類型:string(字符串)倡怎,hash(哈希),list(列表)贱枣,set(集合)及zset(sorted set:有序集合)监署。
- 添加/修改字符串值
set: 鍵不存在,添加纽哥;鍵存在钠乏,修改
- 添加鍵值對(duì)
set key value
- 添加鍵值對(duì),同時(shí)設(shè)置過期時(shí)間
setex key seconds value
- 同時(shí)添加多個(gè)鍵值對(duì)
mset key1 value1 key2 value2 key value3....
- 追加值(在原有值后拼接)
append key str
- 獲取單個(gè)值
get key
- 獲取多個(gè)值
mget key1 key2 key3...
- 刪除鍵值對(duì)
del key
- 刪除多個(gè)鍵
del key1 key2...
- 查找鍵(支持通配符)
keys name
keys *
- 判斷鍵是否存在
exists key
如果鍵存在春塌,返回1; 不存在晓避,返回0 - 查看鍵對(duì)應(yīng)value是什么類型
type key
- 設(shè)置已有鍵的過期時(shí)間
expire key seconds
- 查看鍵有效時(shí)間
ttl key
返回 >0 代表有效時(shí)間,單位:秒
返回 -1 為永遠(yuǎn)有效
返回 -2 為鍵不存在
# 沒有過期時(shí)間
redis 127.0.0.1:6379> SET name "xiaobai"
OK
redis 127.0.0.1:6379> GET name
"xiaobai"
redis 127.0.0.1:6379> SET name "xiaohuang"
OK
redis 127.0.0.1:6379> GET name
"xiaohuang"
# 設(shè)置過期時(shí)間5秒(5秒后數(shù)據(jù)自動(dòng)刪除)
127.0.0.1:6379> setex gender 5 "男"
OK
127.0.0.1:6379> get gender
"男"
127.0.0.1:6379> get gender # 5秒之后
(nil)
# 同時(shí)添加多個(gè)鍵值對(duì)
127.0.0.1:6379> mset name1 "xiaoyi" name2 "xiaoer" name3 "xiaosan"
OK
127.0.0.1:6379> get name1
"xiaoyi"
127.0.0.1:6379> get name3
"xiaosan"
# 追加值
127.0.0.1:6379> set name "test"
OK
127.0.0.1:6379> get name
"test"
127.0.0.1:6379> append name "123"
(integer) 7
127.0.0.1:6379> get name
"test123"
# 獲取多個(gè)值
127.0.0.1:6379> mget name1 name2 name3
1) "xiaoyi"
2) "xiaoer"
3) "xiaosan"
# 查找鍵
127.0.0.1:6379> keys name
1) "name"
127.0.0.1:6379> keys *
1) "name"
2) "name2"
3) "name3"
4) "name1"
127.0.0.1:6379> keys ?ame
1) "name"
# 判斷鍵是否存在
127.0.0.1:6379> exists name
(integer) 1
# 查看key對(duì)應(yīng)value的類型
127.0.0.1:6379> type name
string
# 設(shè)置name3的過期時(shí)間為100秒
127.0.0.1:6379> expire name3 100
(integer) 1
# 查看name的有效時(shí)間
127.0.0.1:6379> ttl name
(integer) -1
-
Redis 哈希(Hash)
Redis hash 是一個(gè) string 類型的 field(字段) 和 value(值) 的映射表只壳,hash 特別適合用于存儲(chǔ)對(duì)象俏拱。
- 設(shè)置單個(gè)字段
hset key field value
如果字段不存在,則添加吼句;存在彰触,則修改 - 設(shè)置多個(gè)字段
hmset key field1 value1 filed2 value2...
- 獲取指定鍵所有字段
hkeys key
- 獲取一個(gè)字段值
hget key filed
- 獲取多個(gè)字段值
hmget key filed1 filed2...
- 獲取所有字段值
hvals key
- 獲取所有字段和值
hgetall key
- 刪除指定字段
hdel key field1 field2...
- 刪除整個(gè)hash值
del key
# 增加一個(gè)hash鍵值對(duì),字段為name命辖,值為L(zhǎng)uffy
127.0.0.1:6379> hset user name 'Luffy'
(integer) 1
# 增加一個(gè)hash鍵值對(duì)况毅,字段為age分蓖,值為16
127.0.0.1:6379> hset user age 16
(integer) 1
# 增加多個(gè)hash鍵值對(duì)
127.0.0.1:6379> hmset user1 name 'Naruto' age 17
OK
# 獲取user鍵的所有字段
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
# 獲取user鍵對(duì)應(yīng)的hash的name字段值
127.0.0.1:6379> hget user name
"Luffy"
# 獲取user鍵對(duì)應(yīng)hash的name、age字段值
127.0.0.1:6379> hmget user name age
1) "Luffy"
2) "16"
# 獲取user鍵對(duì)應(yīng)hash的所有字段值
127.0.0.1:6379> hvals user
1) "Luffy"
2) "16"
# 獲取user鍵對(duì)應(yīng)hash的所有字段和值
127.0.0.1:6379> hgetall user
1) "name"
2) "Luffy"
3) "age"
4) "16"
# 刪除user鍵對(duì)應(yīng)hash的age字段
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "Luffy"
# 刪除user鍵值對(duì)
127.0.0.1:6379> del user
(integer) 1
-
Redis 列表(List)
Redis列表是簡(jiǎn)單的字符串列表尔许,按照插入順序排序么鹤。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)。
- 列表左側(cè)插入值
lpush key value1 value2...
- 列表右側(cè)插入值
rpush key value1 value2...
- 在指定值前面或后面插入值
linsert key before value 插入的值
linsert key after value 插入的值
- 獲取列表指定范圍的值
lrange key start stop
lrange key 0 -1
獲取列表所有值
索引從左側(cè)開始味廊,第一個(gè)值是0蒸甜;
索引可以是負(fù)數(shù),表示從尾部開始余佛,-1表示最后一個(gè)值柠新; - 獲取列表長(zhǎng)度
llen key
- 修改指定索引位置的值
lset key index value
- 將列表中前count次出現(xiàn)的值刪除
lrem key count value
count > 0,從頭往尾刪辉巡;
count < 0恨憎,從尾往頭刪;
count = 0郊楣,全部刪除憔恳;
# 鍵students添加list值 左側(cè)
127.0.0.1:6379> lpush students 'xiaohong' 'xiaolan' 'xiaolv' 'xiaozi'
(integer) 4
# 右側(cè)添加
127.0.0.1:6379> rpush students 'xiaohuang'
(integer) 5
# 在'xiaozi'前面插入值
127.0.0.1:6379> linsert students before 'xiaozi' 'qian'
(integer) 7
# 在'xiaozi'后面插入值
127.0.0.1:6379> linsert students after 'xiaozi' 'hou'
(integer) 8
# 獲取列表下標(biāo) 0-3的值
127.0.0.1:6379> lrange students 0 3
1) "zuoce"
2) "qian"
3) "xiaozi"
4) "hou"
# 獲取students列表所有值
127.0.0.1:6379> lrange students 0 -1
1) "zuoce"
2) "qian"
3) "xiaozi"
4) "hou"
5) "xiaolv"
6) "xiaolan"
7) "xiaohong"
8) "xiaohuang"
# 獲取列表長(zhǎng)度
127.0.0.1:6379> llen students
(integer) 8
# 修改'xiaolv'為'xiaohei'
127.0.0.1:6379> lset students 4 'xiaohei'
OK
127.0.0.1:6379> lpush test a b c a b c a a
(integer) 8
# 刪除test列表中出現(xiàn)的前2個(gè)c
127.0.0.1:6379> lrem test 2 c
(integer) 2
127.0.0.1:6379> lrange test 0 -1
1) "a"
2) "a"
3) "b"
4) "a"
5) "b"
6) "a"
# 刪除test列表中出現(xiàn)的前1個(gè)b
127.0.0.1:6379> lrem test 1 b
(integer) 1
127.0.0.1:6379> lrange test 0 -1
1) "a"
2) "a"
3) "a"
4) "b"
5) "a"
# 刪除test列表中所有的a
127.0.0.1:6379> lrem test 0 a
(integer) 4
127.0.0.1:6379> lrange test 0 -1
1) "b"
-
Redis 集合(Set)
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的净蚤。
只能添加钥组、刪除,不能修改今瀑。
- 集合添加值
sadd key value1 value2...
- 集合元素?cái)?shù)量
scard key
- 查詢集合所有元素
smembers key
- 刪除指定值
srem key value
# 集合添加元素
127.0.0.1:6379> sadd set_test 'aa' 'bb' 'cc'
(integer) 3
# 集合元素?cái)?shù)量
127.0.0.1:6379> scard set_test
(integer) 3
# 查詢set_test集合元素
127.0.0.1:6379> smembers set_test
1) "aa"
2) "cc"
3) "bb"
# 刪除'bb'
127.0.0.1:6379> srem set_test bb
(integer) 1
127.0.0.1:6379> smembers set_test
1) "aa"
2) "cc"
- Redis 有序集合(sorted set)
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復(fù)的成員程梦。
每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)分?jǐn)?shù)(score),分?jǐn)?shù)(score)可以為負(fù)數(shù)橘荠,redis通過分?jǐn)?shù)(score)來為集合中的成員進(jìn)行從小到大的排序作烟。
有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
只能添加砾医、刪除,不能修改衣厘。
- zset中添加值
zadd key score1 value1 score2 value2...
- 獲取zset指定范圍內(nèi)的值
zrange key start stop
zrange key start stop withscores
同時(shí)獲取score - 通過score獲取值
zrangebyscore key min max
zrangebyscore key min max withscores
min表示score開始值如蚜;max表示score結(jié)束值; - 通過值得到score
zscore key value
- 刪除指定值
zrem key value1 value2...
- 刪除score在指定范圍內(nèi)的值
zremrangebyscore key min max
# 添加元素
127.0.0.1:6379> zadd zet_test 1 aaa 3 bbb 2 ccc
(integer) 3
# 獲取下標(biāo)為0~1的元素
127.0.0.1:6379> zrange zet_test 0 1
1) "aaa"
2) "ccc"
# 獲取zet_test集合中的所有元素
127.0.0.1:6379> zrange zet_test 0 -1
1) "aaa"
2) "ccc"
3) "bbb"
# 獲取集合中元素和score
127.0.0.1:6379> zrange zet_test 0 -1 withscores
1) "aaa"
2) "1"
3) "ccc"
4) "2"
5) "bbb"
6) "3"
# 返回score在0 - 2之間的值
127.0.0.1:6379> zrangebyscore zet_test 0 2
1) "aaa"
2) "ccc"
# 返回值‘ccc’的score
127.0.0.1:6379> zscore zet_test ccc
"2"
# 刪除指定值
127.0.0.1:6379> zrem zet_test eee
(integer) 1
# 刪除score在1 - 3區(qū)間的值
127.0.0.1:6379> zremrangebyscore zet_test 1 3
(integer) 3