1. 程式人生 > 資料庫 >Redis安裝配置與常用命令

Redis安裝配置與常用命令

Redis簡介

Redis是一個開源(BSD許可),記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列代理。
它支援字串、雜湊表、列表、集合、有序集合,點陣圖,hyperloglogs等資料型別。
內建複製、Lua指令碼、LRU收回、事務以及不同級別磁碟持久化功能,同時通過Redis Sentinel提供高可用,通過Redis Cluster提供自動分割槽。
簡言之,Redis是一種面向“鍵/值”對資料型別的記憶體資料庫,可以滿足我們對海量資料的快速讀寫需求。
Redis是一款NoSQL產品。
官網:http://www.redis.io
或者:http://redis.cn/

Redis的特點

Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。
Redis不僅僅支援簡單的k-v型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。
Redis支援資料的備份,即master-slave主從模式的資料備份。

Redis的優勢

效能極高——Redis讀的速度為11w/s,寫的速度為8.1w/s。
豐富的資料型別——Redis支援二進位制案例的Strings,Lists,Hashes,Sets即Ordered Sets資料型別操作。
原子性——Redis的所有操作都是原子性的,同時Redis還支援對幾個操作合併後的原子性執行。

豐富的特性——Redis還支援public/subscribe,通知,key過期等特性。

Redis應用

應用在高併發和實時請求的場景,eg新浪微博
hash:關注列表,粉絲列表
string:微博數,粉絲數
(避免使用select count(*) from...)
sorted set:
TopN,熱門微博
還有github,
stackoverflow也
用到了redis

Redis安裝配置

Redis安裝

windows下直接解壓即可使用,主要說明Linux下的安裝方式 :

解壓:
tar -zxvf soft/redis-3.2.0.tar.gz -C app/
重新命名:
mv app/redis-3.2.0/ app/redis

編譯:
make
安裝:
make install PREFIX=/home/uplooking/app/redis

Redis配置

初始配置

修個redis.conf中的配置項
bind uplooking01
daemonize yes(後臺執行)
logfile /opt/redis-3.2.0/logs/redis.log(日誌檔案,目錄必須存在)

啟動服務

make完成之後,在redis-3.2.0/src目錄下會出現編譯後的redis伺服器程式redis-server,還有用於測試的客戶端程式redis-cli。
redis-3.2.0]$ src/redis-server redis.conf
當然,如果再執行了make install則會在指定安裝目錄下生成一個bin目錄,同時也會有相關的命令用於操作Redis.

啟動客戶端

redis-3.2.0]$ src/redis-cli -h localhost -p 6379

關閉服務

ps -ef | grep redis
找到程序id後直接kill -9就可以了。

Redis配置檢視

Redis的配置檔案位於Redis的安裝目錄之下,檔名為redis.conf。可以通過config命令來檢視或設定配置項。

檢視
語法,Redis config命令格式如下:
redis localost:6379> config get config_set_name
eg: redis localost:6379> config get loglevel
1) "loglevel"
2) "notice"
使用*號獲取所有配置項:redis localost:6379> config get *

編輯
可以通過修改redis.conf檔案或使用config set命令來修改配置
基本語法:
redis localost:6379> config set conf_setting_name new_value
eg: redis localost:6379> config set loglevel "warning"
redis localost:6379> config get loglevel
1) "loglevel"
2) "warning" -->對當前服務有效,之後當服務重啟之後,才會失效
Redis操作

string(字串)

string是redis最基本的型別,你可以理解成與memcached一模一樣的型別,一個key對應一個value。
string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的物件 。
string型別是Redis最基本的資料型別,一個鍵最大能儲存512MB。
例項
redis 127.0.0.1:6379> SET name "redis.net.cn"
OK
redis 127.0.0.1:6379> GET name
"redis.net.cn"
在以上例項中我們使用了Redis的SET和GET命令。鍵為name,對應的值為redis.net.cn。
注意:一個鍵最大能儲存512MB。

常見的string操作命令如下:

set key value          設定指定key的值(會覆蓋無視資料型別)
                set name yaohuiying

get key             獲取指定key的值
                get name

getrange key start end     返回key中字串值的子字元
                getrange name 1 4
                注意:字串索引從0開始,獲取索引片段[start,end],包頭包尾

getset key value        將給定key的值設為value,並返回key的舊值(old value)
                getset name liuxiangqian
                返回值為yaohuiying

mget key1 [key2..]       獲取所有(一個或多個)給定key的值
                mget name name1

setex key seconds value     將值value關聯到key,並將key的過期時間設為seconds(以秒為單位)

setnx key value         只有在key不存在時設定key的值
                作用同set,唯一和set的區別在於,只有當key不存在的時候,才進行設定,
                而key存在,無法完成覆蓋

setrange key offset value    用value引數覆寫給定key所儲存的字串值,從偏移量offset開始
                對key的原先的value進行區域性覆蓋,從offset偏移量開始,
                value有多長,就覆蓋多長

strlen key           返回key所儲存的字串值的長度

mset key value [key value ...]   同時設定一個或多個key-value對

MSETNX key value [key value ...]  同時設定一個或多個key-value對,當且僅當所有給定key都不存在

psetex key milliseconds value    這個命令和SETEX命令相似,但它以毫秒為單位設定key的生存時間,
                  而不是像SETEX命令那樣,以秒為單位

incr key              將key中對應儲存的數字值增一
                  對key對應的value進行+1,但是value必須是數字型別的字串

INCRBY key increment        將key所儲存的值加上給定的增量值(increment)
                  之定義的步長

incrbyfloat key increment      將key所儲存的值加上給定的浮點增量值(increment)

decr key              將key中儲存的數字值減一

decrby key decrement key      所儲存的值減去給定的減量值(decrement)

append key value          如果key已經存在並且是一個字串,
                  APPEND命令將value追加到key原來的值的末尾

hash(雜湊)

Redis hash 是一個鍵值對集合。Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
例項
redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL w3ckey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
以上例項中 hash 資料型別儲存了一些描述資訊(name,description,likes,visitors)到hash的w3ckey中。 使用hgetall 獲取所有的內容。
每個hash可以儲存232-1鍵值對(40多億)。

常用命令操作如下:

hexists key field        檢視hash表key中,指定欄位是否存在
                0表示沒有,1表示有
hget key field         獲取hash表中指定欄位的值

hgetall key           獲取所有的欄位和值
hincrby key field increment   為指定欄位的整數值加上增量increment

hincrbyfloat key field increment  為指定欄位的浮點值加上增量increment

hkeys key            獲取所有的欄位
hlen key            獲取key的欄位的數量
hdel key field2 [field2]    刪除一個或多個哈是表字段
hmget key field1 [field2]    獲取所有給定欄位的值
hmset key f1 v1 [f2 v2]     同時將多個file-value設定到key中
hset key field value      將雜湊表key的field設定為value
hsetnx key field value     當在field不存在時,設定相關欄位的值
hvals key            獲取所有的值
hscan key cursor [MATCH pattern] [COUNT count] 迭代雜湊表中的鍵值對


list(列表)

Redis列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。
例項
redis 127.0.0.1:6379> lpush redis.net.cn redis
(integer) 1
redis 127.0.0.1:6379> lpush redis.net.cn mongodb
(integer) 2
redis 127.0.0.1:6379> lpush redis.net.cn rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange redis.net.cn 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
列表最多可儲存 232-1元素 (4294967295,每個列表可儲存40多億)。

常用操作命令如下:

注意:關於list的操作,可以分為從左邊操作,也可以從右邊進行操作
l--->left(頭部),r---->right(尾部)

blpop key1 [key2 ] timeout   移除並獲取列表中的第一個元素,如果沒有會阻塞列表直到超時【單位是秒s】
                或發現可彈出元素為止
                簡言之就是刪除key1 key2.。。中的元素,如果沒有元素則阻塞,結束條件為 
                要麼時間超過了timeout;要麼發現有新的元素進來

brpop key1 [key2 ] timeout   移除並獲取列表中的最後一個元素,如果沒有會阻塞列表直到超時或發現可彈出
                元素為止
                同blpop,不同在於刪除元素的方向不一致

brpoplpush source destination timeout  從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回
                    它,如果沒有元素會阻塞列表知道等待超時或發現可彈出元素為止
                    uplooking01:6379> brpoplpush season season1 100
                    "spring"
                    (7.59s)

lindex key index        通過索引獲取列表中的元素
                注意一個:
                lindex key -1獲取的是最後一個元素

linsert key before|after pivot value  在列表的元素前或後插入元素
                    uplooking01:6379> lrange season 0 -1
                    1) "winter"
                    2) "autumn"
                    3) "summer"
                    uplooking01:6379> linsert season after summer spring
                    (integer) 4
                    uplooking01:6379> lrange season 0 -1
                    1) "winter"
                    2) "autumn"
                    3) "summer"
                    4) "spring"

llen key            獲取列表長度,列表大小

lpop key            移出並獲取列表的第一個元素

lpush key value1 [value2]    將一個或多個值插入到列表頭部

lpushx key value        將一個或多個值插入到已存在的列表頭部

lrange key start stop      獲取列表指定返回內的元素
                [start,stop]
                如果要出去lrange中的所有的元素的話
                lrange key 0 -1

lrem key count value      移出列表元素
                count > 0: 從頭往尾移除值為 value 的元素,1時,表示移除1個元素
                count < 0: 從尾往頭移除值為 value 的元素,-2時,表示移除2個元素
                count = 0: 移除所有值為 value 的元素。

lset key index value      通過索引設定列表元素的值(list.set(i,value))
                需要大家注意的是一個特殊的索引-1,表示最後一個元素

ltrim key start stop      對一個列表進行修剪(trim),也就是說,讓列表只保留指定區間內的元素,
                刪除其它元素
                [start,stop]
                uplooking01:6379> lrange season 0 -1
                1) "winter"
                2) "autumn"
                3) "summer"
                4) "spring"
                uplooking01:6379> ltrim season 1 2
                OK
                uplooking01:6379> lrange season 0 -1
                1) "autumn"
                2) "summer"

rpop key            移出並獲取列表最後一個元素

rpoplpush source destination  移出列表的最後一個元素,並將該元素新增到另一列表並返回

rpush key value1 [value2]    在列表中新增一個或多個值

rpushx key value        為已存在的列表新增值


set(集合)

Redis的Set是string型別的無序集合。

集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。
sadd命令
新增一個string元素到,key對應的set集合中,成功返回1,如果元素已經存在集合中返回0,key對應的set不存在返回錯誤。
sadd key member
例項
redis 127.0.0.1:6379> sadd redis.net.cn redis
(integer) 1
redis 127.0.0.1:6379> sadd redis.net.cn mongodb
(integer) 1
redis 127.0.0.1:6379> sadd redis.net.cn rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd redis.net.cn rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers redis.net.cn
1) "rabitmq"
2) "mongodb"
3) "redis"
注意:以上例項中 rabitmq 添加了兩次,但根據集合內元素的唯一性,第二次插入的元素將被忽略。
集合中最大的成員數為 232 - 1 (4294967295,每個集合可儲存40多億個成員)。

常用操作命令如下:

sadd key member1 [member2]   向集合新增一個或多個成員

scard key            獲取集合的成員數(size)

sdiff key1 [key2]        返回給定所有集合的差集
                集合A={1,2,3,4,5} 集合B={2,6,8}
                A∩B = {2,3}
                A∪B = {1,5,8}
                A-B(差集) = {1,8}
                      {1,5}√
                uplooking01:6379> sdiff A B
                1) "1"
                2) "4"
                3) "5"

sdiffstore dest key1 [key2]   返回並儲存給定集合差集儲存到dest中
                uplooking01:6379> sdiffstore tmp A B
                (integer) 3
                uplooking01:6379> smembers tmp
                1) "1"
                2) "4"
                3) "5"

sinter key1 [key2]       返回給定集合的交集
                uplooking01:6379> sinter A B
                1) "2"
                2) "3"

sinterstore dest key1 [key2]  返回並儲存給定集合的交集到dest中

sismember key member      判斷member元素是否是集合key的成員
                uplooking01:6379> sismember A 3
                (integer) 1
                uplooking01:6379

smembers key          返回集合中所有成員

smove src dest member      將member元素從src移動到dest中

spop key            移除並返回集合中的一個隨機元素

srandmember key [count]     返回集合中一個或多個隨機數
                隨機返回集合key中的count個元素,沒有count,返回1個
                uplooking01:6379> srandmember A
                "1"
                uplooking01:6379> srandmember A 2
                1) "3"
                2) "4"

srem key member1 [member2]   移除集合中一個或多個成員

sunion key1 [key2]       返回所有給定集合的並集---就是數學中的並集的概念
                uplooking01:6379> sunion A B
                1) "1"
                2) "2"
                3) "3"
                4) "4"
                5) "5"
                6) "6"
                7) "8"

sunionstore dest key1 [key2]  返回並儲存給定集合的並集到dest

sscan key cursor [match pattern] [count count]   迭代集合中的元素


zset(有序集合)

Redis zset和set一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重複。
zadd命令 新增元素到集合,元素在集合中存在則更新對應score
zadd key score member
例項
redis 127.0.0.1:6379> zadd redis.net.cn 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd redis.net.cn 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE redis.net.cn 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"

常用操作命令如下:

zadd key score1 member1 [score2 member2]    想有序集合新增一個或多個成員,
                        或是更新已經存在成員的分數
                     uplooking01:6379> zadd website 0.01 www.uplooking.com
                     (integer) 1
                     uplooking01:6379> zadd website 0.05 www.baidu.com
                     (integer) 1
                     uplooking01:6379> zadd website 0.1 www.google.com
                     (integer) 1
                     uplooking01:6379> zadd website 1 www.taobao.com
                     (integer) 1
                     uplooking01:6379> zadd website 0.005 www.jd.com
                     (integer) 1

zcard key                獲取有序集合的成員數
                    uplooking01:6379> zcard website
                    (integer) 5

zcount key min max           計算在有序集合中指定區間分數的成員數
                    獲取分數區間[min,max]中元素
                     uplooking01:6379> zcount website 0.01 0.1
                     (integer) 3

zincrby key increment member      有序集合中對指定成員的分數上增量incr
                   uplooking01:6379> zincrby website 0.01 www.uplooking.com
                   "0.02"  

zinterstore dest nkeys key [key..]   計算給定的一個或多個有序集的交集並儲存在新的有序集合dest中

zlexcount key min max          在有序集合中計算指定字典區間內成員數量
                    需要清楚的是
                    可以使用-代表,得分最小的元素,使用+代表得分最大的元素
                    zlexcount key - + 得到就是集合的size
                    min===>[member1
                    max===>[member2
                    得到的元素個數就是在區間[member1,member2]內的元素個數
                    redis> ZADD myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g
                    (integer) 7
                    redis> zrange myzset 0 -1
                    1) "a"
                    2) "b"
                    3) "c"
                    4) "d"
                    5) "e"
                    6) "f"
                    7) "g"
                    redis> ZLEXCOUNT myzset - +
                    (integer) 7
                    redis> ZLEXCOUNT myzset [c +
                    (integer) 5
                    redis> ZLEXCOUNT myzset - [c
                    (integer) 3
                    redis>   

zrange key start stop [withscores]   通過索引區間返回有序集合成指定區間內的成員
                    特殊的一個寫法zrange key 0 -1返回所有的元素

zrangebylex key min max [limit offset count]  通過字典區間返回有序集合的成員

zrangebyscore key min max [withscores] [limit] 通過分數返回有序集合指定區間內的成員

zrank key member            返回有序集合中指定成員的索引

zrem key member [member ...]      移除有序集合中的一個或多個成員
                    返回1,刪除成功,返回0,沒有這個元素

zremrangebylex key min max       移除有序集合中給定的字典區間的所有成員

zremrangebyrank key start stop     移除key中給定的排名區間的所有成員
                    排名就是索引

zremrangebyscore key start stop     移除key中給定的分數區間的所有成員
                    分數就是score

zrevrange key start stop [withscores]  返回有序key中指定區間內的成員,通過索引,分數從高到低
                    和zrange key start stop反過來

zrevrangebysocre key max min [withscores]  返回有序key中指定分數區間內的成員,通過索引,分數從高到低

zrevrank key memeber          返回key中指定成員的排名,key成員按分數值遞減排序

zscore key member            返回key中member的分數

zunionstore dest numkeys key [key...]  計算給定的一個或多個有序集的並集,並存儲到新的dest中

zscan key cursor [match pattern] [count count] 迭代有序集合中的元素(包括元素成員和元素分值)
                        uplooking01:6379> zscan website 1
                        1) "0"
                        2) 1) "www.jd.com"
                          2) "0.0050000000000000001"
                          3) "www.uplooking.com"
                          4) "0.02"
                          5) "www.baidu.com"
                          6) "0.050000000000000003"
                          7) "www.taobao.com"
                          8) "1"

Redis常見命令

keys *
列舉出所有的key
type key
獲取對應key的資料型別
select [0-15]
切換到某一個數據庫中
rename oldKey newKey
將oldKey重新命名為newKey
終端中屬於密碼的兩種方式:
第一種:
連線的時候:redis-3.2.0]# src/redis-cli -h uplooking03 -a uplooking
第二中:
登陸之後再輸入密碼:
auth uplooking(密碼)
停止redis服務的命令:
src/redis-cli -h uplooking01 -p 6379 shutdown

1、鍵值相關命令
keys * 取出當前所有的key
exists name 檢視redis是否有name這個key
del name 刪除key name
expire confirm 100 設定confirm這個key100秒過期
ttl confirm 獲取confirm 這個key的有效時長
select 0 選擇到0資料庫 redis預設的資料庫是0~15一共16個數據庫
move confirm 1 將當前資料庫中的key移動到其他的資料庫中,
persist confirm 移除confirm這個key的過期時間
randomkey 隨機返回資料庫裡面的一個key
rename key2 key3 重新命名key2 為key3
type key2 返回key的資料型別
2、伺服器相關命令
ping PONG返回響應是否連線成功
echo 在命令列列印一些內容
select 0~15 編號的資料庫
quit /exit 退出客戶端
dbsize 返回當前資料庫中所有key的數量
info 返回redis的相關資訊
config get dir/* 實時傳儲收到的請求
flushdb 刪除當前選擇資料庫中的所有key
flushall 刪除所有資料庫中的資料庫