溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Redis介紹和安裝方法

發(fā)布時(shí)間:2021-07-09 16:55:22 來(lái)源:億速云 閱讀:192 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Redis介紹和安裝方法”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Redis介紹和安裝方法”吧!

Redis介紹

什么是Redis

Redis是用C語(yǔ)言開(kāi)發(fā)的一個(gè)開(kāi)源(BSD許可)的高性能鍵值對(duì)key-value)內(nèi)存數(shù)據(jù)庫(kù),可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件。它是一種NoSQL(NOT-Only Sql,泛指非關(guān)系型數(shù)據(jù)庫(kù))數(shù)據(jù)庫(kù)

  • 性能優(yōu)秀,數(shù)據(jù)在內(nèi)存中,讀寫(xiě)速度非??欤С植l(fā)10W QPS

  • 單進(jìn)程單線程,是線程安全的,采用IO多路復(fù)用

  • 豐富數(shù)據(jù)類(lèi)型:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets) 等

  • 支持?jǐn)?shù)據(jù)持久化,可以將內(nèi)存中數(shù)據(jù)保存在磁盤(pán)中,重啟時(shí)加載

  • 主從復(fù)制

Redis應(yīng)用場(chǎng)景

  • 內(nèi)存數(shù)據(jù)庫(kù)(登錄信息、購(gòu)物車(chē)信息、用戶瀏覽記錄等)

  • 緩存服務(wù)器(商品數(shù)據(jù)、廣告數(shù)據(jù)等等)(最多使用

  • 解決分布式集群架構(gòu)中的 session 分離問(wèn)題( session 共享)

  • 任務(wù)隊(duì)列(秒殺、搶購(gòu)、12306等等)

  • 分布式鎖的實(shí)現(xiàn)

  • 支持發(fā)布訂閱的消息模式

  • 應(yīng)用排行榜(有序集合)

  • 網(wǎng)站訪問(wèn)統(tǒng)計(jì)

  • 數(shù)據(jù)過(guò)期處理(可以精確到毫秒)

Redis安裝啟動(dòng)(單機(jī))

Redis沒(méi)有官方的Windows版本,建議在Linux系統(tǒng)上安裝運(yùn)行

Linux下安裝啟動(dòng)

安裝

Redis的官網(wǎng)為redis.io,在官網(wǎng)上可以獲取最新的版本

下載解壓

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz

進(jìn)入目錄、編譯

$ cd redis-5.0.5
$ make

編譯完成的二進(jìn)制文件是在src目錄下,其中redis-server為服務(wù)端程序,redis-cli為客戶端程序

安裝

還可以通過(guò)make install命令安裝到指定目錄,通過(guò)PREFIX指定安裝目錄

$ make install PREFIX=/usr/local/redis

命令說(shuō)明

  • redis-server:?jiǎn)?dòng) redis 服務(wù)

  • redis-cli:進(jìn)入 redis 命令客戶端

  • redis-benchmark: 性能測(cè)試的工具

  • redis-check-aof: aof 文件進(jìn)行檢查的工具

  • redis-check-dump: rdb 文件進(jìn)行檢查的工具

  • redis-sentinel: 啟動(dòng)哨兵監(jiān)控服務(wù)

啟動(dòng)

啟動(dòng)Redis的命令為redis-server,運(yùn)行安裝目錄下的redis-server

$ /usr/local/redis/bin/redis-server

Redis介紹和安裝方法

關(guān)閉ctrl+c,這種方式啟動(dòng),我們的連接窗口關(guān)閉,Redis也會(huì)關(guān)閉,我們會(huì)希望它在后臺(tái)一直運(yùn)行著,就需要后端啟動(dòng)

后端啟動(dòng)(守護(hù)進(jìn)程啟動(dòng))

1)從解壓文件中redis-5.0.5復(fù)制redis.conf配置文件到安裝目錄下的bin目錄

$ cp /root/redis-5.0.5/redis.conf /usr/local/redis/bin/

2)修改redis.conf配置文件

$ vim redis.conf
# 將`daemonize`由`no`改為`yes`
daemonize yes
# 默認(rèn)綁定的是回環(huán)地址,默認(rèn)不能被其他機(jī)器訪問(wèn)
# bind 127.0.0.1
# 是否開(kāi)啟保護(hù)模式,由yes該為no
protected-mode no

3)啟動(dòng)redis-server服務(wù)

./redis-server redis.conf

4)關(guān)閉服務(wù)

./redis-cli shutdown

命令行客戶端

啟動(dòng)客戶端的命令是redis-cli,它有兩個(gè)參數(shù)

  • -h:redis服務(wù)器的ip地址(默認(rèn)為127.0.0.1)

  • -p:redis實(shí)例的端口號(hào)(默認(rèn)為6379)

./redis-cli -h 127.0.0.1 -p 6379

Windows安裝

雖然官方并沒(méi)有Windows版本,但是Microsoft有開(kāi)發(fā)和維護(hù)64位的Redis,下載地址為https://github.com/microsoftarchive/redis/releases

這里下載Redis-x64-xxx.zip并解壓,進(jìn)入解壓后的目錄,以下命令是啟動(dòng)redis

redis-server redis.windows.conf

客戶端連接為

redis-cli.exe -h 127.0.0.1 -p 6379

Redis數(shù)據(jù)結(jié)構(gòu)及操作命令

Redis是通過(guò)key-value的格式來(lái)存儲(chǔ)數(shù)據(jù)的,key是二進(jìn)制安全的字符串,其中value是支持多種數(shù)據(jù)類(lèi)型的,我們需要了解和掌握如下5種數(shù)據(jù)類(lèi)型

  • 字符串(String):二進(jìn)制安全的字符串,可以是字符串、整數(shù)或浮點(diǎn)數(shù)

  • 散列(Hash):一個(gè)String類(lèi)型的field和value的映射表,適合存儲(chǔ)對(duì)象

  • 列表(List):字符串列表,按插入順序排序

  • 集合(Set):字符串無(wú)序集合,去重

  • 有序集合(Sorted Set,zset):與Set相同,不同的是根據(jù)score排序

字符串(String)

命令

set/get 賦值/取值

語(yǔ)法

# 賦值
SET key value [EX seconds] [PX milliseconds] [NX|XX]
# 取值 
GET key
# 設(shè)置新值,返回舊值
GETSET key value
  • EX seconds:鍵過(guò)期時(shí)間

  • PX milliseconds:為鍵設(shè)置毫秒級(jí)過(guò)期時(shí)間

  • NX:鍵必須不存在才可以設(shè)置成功,用于添加

  • XX:鍵必須存在,才可以設(shè)置成功,用于更新

示例:

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"

incr/incrby/decr/decrby 數(shù)值增減

當(dāng)value值為整數(shù)時(shí),才可以使用數(shù)值增減命令,incr/decr為增加/減少1,incrby/decrby為增加/減少具體的數(shù)值,數(shù)值的增減是原子操作

127.0.0.1:6379> set counter 100
OK
127.0.0.1:6379> incr counter
(integer) 101
127.0.0.1:6379> incrby counter 20
(integer) 121
127.0.0.1:6379> decr counter
(integer) 120
127.0.0.1:6379> decrby counter 10
(integer) 110

mset/mget 同時(shí)設(shè)置/獲取多個(gè)鍵值

在單個(gè)命令中設(shè)置/獲取多個(gè)鍵值是可以減少延遲的

127.0.0.1:6379> mset k1 10 k2 20 k3 30
OK
127.0.0.1:6379> mget k1 k2 k3
1) "10"
2) "20"
3) "30"

使用場(chǎng)景

  • 常規(guī)的key-value緩存

  • 計(jì)數(shù):微博數(shù)、粉絲數(shù)等

  • 應(yīng)用INCR原子計(jì)數(shù)生產(chǎn)全局唯一id或單號(hào)

散列(Hash)

命令

hset/hget/hmset/hmget 設(shè)置/取值

# 設(shè)置一個(gè)字段值
HSET key field value 
# 設(shè)置多個(gè)字段值
HMSET key field value [field value ...]
# 字段不存在時(shí)賦值
HMSETNX key field value
# 獲取一個(gè)字段值
HGET key field 
# 獲取多個(gè)字段值
HMGET key field [field ...] 
# 獲取所有字段值
HGETALL key
127.0.0.1:6379> hmset user name zou age 23
OK
127.0.0.1:6379> hset user location Guangzhou
(integer) 1
127.0.0.1:6379> hget user name
"zou"
127.0.0.1:6379> hgetall user
1) "name"
2) "zou"
3) "age"
4) "23"
5) "location"
6) "Guangzhou"

hincrby 增加數(shù)字

# 增加數(shù)字
HINCRBY key field increment
127.0.0.1:6379> hincrby user age 1
(integer) 24

其他命令

# 判斷字段是否存在
HEXISTS key field
# 只獲取字段名
HKEYS key
# 只獲取字段值
HVALS key
# 獲取字段數(shù)量
HLEN key
# 獲取所有字段和值
HGETALL key

String和Hash的區(qū)別

Hash類(lèi)型適合存儲(chǔ)那些對(duì)象數(shù)據(jù),特別是對(duì)象屬性經(jīng)常發(fā)生【增刪改】操作的數(shù)據(jù)。 String類(lèi)型也可以存儲(chǔ)對(duì)象數(shù)據(jù),將Java對(duì)象轉(zhuǎn)成json字符串或序列化進(jìn)行存儲(chǔ),這種存儲(chǔ)適合【查詢】操作

使用場(chǎng)景

  • 存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)對(duì)象,如用戶信息、商品信息

列表(List)

Redis的列表是鏈表結(jié)構(gòu)的,可以存儲(chǔ)一個(gè)有序的字符串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個(gè)片段

列表類(lèi)型內(nèi)部是使用雙向鏈表(double linked list)實(shí)現(xiàn)的,所以向列表兩端添加元素的時(shí)間復(fù)雜度為0(1) ,獲取越接近兩端的元素速度就越快。這意味著即使是一個(gè)有幾千萬(wàn)個(gè)元素的列表,獲取頭部或尾部的10條記錄也是極快的

命令

lpush/rpush 添加新元素到列表

# 列表的左端添加元素
LPUSH key value [value ...]
# 列表的右端添加元素
RPUSH key value [value ...]
127.0.0.1:6379> lpush list:1 1 2 3 
(integer) 3 
127.0.0.1:6379> rpush list:1 4 5 6 
(integer) 3

lrange 獲取列表片段

獲取列表中的某一片段,返回start、stop之間的所有元素(包含兩端的元素),索引從0開(kāi)始,索引可以是負(fù)數(shù),表明從結(jié)尾開(kāi)始計(jì)數(shù):所以-1是最后一個(gè)元素,-2是列表的倒數(shù)第二個(gè)元素

LRANGE key start stop
127.0.0.1:6379> lrange  list:1 0 2 
1) "2" 
2) "1" 
3) "4"

lpop/rpop 從列表兩端彈出元素

從列表兩端彈出一個(gè)元素,會(huì)分兩步完成:

  • 第一步是將列表左邊的元素從列表中移除

  • 第二步是返回被移除的元素值

LPOP key
RPOP key
127.0.0.1:6379>lpop list:1 
"3“ 
127.0.0.1:6379>rpop list:1 
"6“

其他命令

# 獲取列表中元素的個(gè)數(shù)
LLEN key
# 刪除列表中指定個(gè)數(shù)的值
# - 當(dāng)count>0時(shí), LREM會(huì)從列表左邊開(kāi)始刪除。
# - 當(dāng)count<0時(shí), LREM會(huì)從列表后邊開(kāi)始刪除。
# - 當(dāng)count=0時(shí), LREM刪除所有值為value的元素
LREM key count value
# 獲取指定索引的元素值
LINDEX key index
# 只保留列表指定片段,指定范圍和lrange一致
LTRIM key start stop
# 向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
# 將元素從一個(gè)列表轉(zhuǎn)移到另一個(gè)列表中
RPOPLPUSH source destination

使用場(chǎng)景

  • 各種列表:關(guān)注列表、粉絲列表、評(píng)論

  • 消息隊(duì)列,可以利用Lists的PUSH操作,將任務(wù)存在Lists中,然后工作線程再用POP操作將任務(wù)取出執(zhí)行

  • 利用LRANGE可以很方便的實(shí)現(xiàn)list內(nèi)容分頁(yè)的功能

  • 取最新N個(gè)數(shù)據(jù)的操作

集合(Set)

Set是字符串的無(wú)序集合,其中的數(shù)據(jù)是不重復(fù)沒(méi)有順序,集合類(lèi)型的常用操作是向集合中加入或刪除元素、判斷某個(gè)元素是否存在等,由于集合類(lèi)型的Redis內(nèi)部是使用值為空的散列表實(shí)現(xiàn),所有這些操作的時(shí)間復(fù)雜度都為 0(1),Redis 還提供了多個(gè)集合之間的交集、并集、差集的運(yùn)算

命令

sadd/srem 添加/刪除元素

SADD key member [member ...]
SREM key member [member ...]
127.0.0.1:6379> sadd set a b c 
(integer) 3 
127.0.0.1:6379> sadd set a 
(integer) 0 
127.0.0.1:6379> srem set c d 
(integer) 1

smembers 獲取所有元素

SMEMBERS key
127.0.0.1:6379> smembers set 
1)  "b" 
2)  "a”

sismember 判斷元素是否在集合中

# 判斷元素是否在集合中, 返回1為在,0為不在
SISMEMBER key member
127.0.0.1:6379>sismember set a 
(integer)  1 
127.0.0.1:6379>sismember set h 
(integer)  0

sdiff/sinter/sunion 差集/交集/并集運(yùn)算命令

  • SDIFF - 集合的差集運(yùn)算 A-B:屬于A并且不屬于B的元素構(gòu)成的集合

    SDIFF key [key ...]


    127.0.0.1:6379> sadd setA 1 2 3
    (integer) 3
    127.0.0.1:6379> sadd setB 2 3 4
    (integer) 3
    127.0.0.1:6379> sdiff setA setB
    1) "1"
    127.0.0.1:6379> sdiff setB setA
    1) "4"


  • SINTER - 集合的交集運(yùn)算 A ∩ B:屬于A且屬于B的元素構(gòu)成的集合

    SINTER key [key ...]


    127.0.0.1:6379> sinter setA setB
    1) "2"
    2) "3"


  • SUNION - 集合的并集運(yùn)算 A ∪ B:屬于A或者屬于B的元素構(gòu)成的集合

    SUNION key [key ...]


    127.0.0.1:6379> sunion setA setB
    1) "1"
    2) "2"
    3) "3"
    4) "4"


其它命令

# 獲得集合中元素的個(gè)數(shù)
SCARD key
# 從集合中隨機(jī)彈出一個(gè)元素
SPOP key

使用場(chǎng)景

  • 需要去重的列表

  • 提供了求交集、并集、差集等操作,可以非常方便的實(shí)現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能

有序集合(Sorted Set,zset)

有序集合(Sorted Set,zset)在Set集合類(lèi)型的基礎(chǔ)上,有序集合類(lèi)型為集合中的每個(gè)元素都關(guān)聯(lián)一個(gè)分?jǐn)?shù)(score) ,這使得我們不僅可以完成插入、刪除和判斷元素是否存在在集合中,還能夠獲得分?jǐn)?shù)最高或最低的前N個(gè)元素、獲取指定分?jǐn)?shù)范圍內(nèi)的元素等與分?jǐn)?shù)有關(guān) 的操作

SortedSet和List的區(qū)別

相似點(diǎn)

  • 二者都是有序的,List是按數(shù)據(jù)插入順序,SortedSet是根據(jù)score自然排序

  • 二者都可以獲得某一范圍的元素

區(qū)別

  • 列表類(lèi)型是通過(guò)鏈表實(shí)現(xiàn)的,獲取靠近兩端的數(shù)據(jù)速度極快,而當(dāng)元素增多后,訪問(wèn)中間數(shù)據(jù)的速度會(huì)變慢

  • 有序集合類(lèi)型使用散列表實(shí)現(xiàn),所有即使讀取位于中間部分的數(shù)據(jù)也很快

  • 列表中不能簡(jiǎn)單的調(diào)整某個(gè)元素的位置,但是有序集合可以(通過(guò)更改分?jǐn)?shù)實(shí)現(xiàn))

  • 有序集合要比列表類(lèi)型更耗內(nèi)存

命令

zadd/zrem 添加/刪除元素

ZADD key score member [score member ...]
ZREM key member [member ...]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0
127.0.0.1:6379> zrem scoreboard lisi
(integer) 1

zrange/zrevrange 獲取范圍元素列表

獲得排名在某個(gè)范圍的元素列表。

  • ZRANGE:按照元素分?jǐn)?shù)從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)

  • ZREVRANGE:按照元素分?jǐn)?shù)從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素)

# 如果需要獲得元素的分?jǐn)?shù)的可以在命令尾部加上 WITHSCORES 參數(shù)
ZRANGE key start stop [WITHSCORES] 
ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2
1) "zhangsan"
2) "wangwu"
3) "lisi“
127.0.0.1:6379> zrevrange scoreboard 0 2
1) "lisi"
2) "wangwu"
3) "zhangsan“

zscore 獲取元素的分?jǐn)?shù)

ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi
"97"

其它命令

# 獲得指定分?jǐn)?shù)范圍的元素
ZRANGEBYSCORE key min max [WITHSCORES] 
# 增加某個(gè)元素的分?jǐn)?shù)
ZINCRBY key increment member
# 獲得集合中元素的數(shù)量
ZCARD key
# 獲得指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)
ZCOUNT key min max
# 按照排名范圍刪除元素
ZREMRANGEBYRANK key start stop
# 按照分?jǐn)?shù)范圍刪除元素
ZREMRANGEBYSCORE key min max
# 獲取元素的排名 
# - ZRANK:從小到大
# - ZREVRANK:從大到小
ZRANK key member
ZREVRANK key member

使用場(chǎng)景

  • 存放一個(gè)有序的并且不重復(fù)的集合列表

  • 排行榜相關(guān),取TOP N操作

通用命令

keys 返回滿足規(guī)則鍵值

# 返回滿足規(guī)則的key-value
KEYS pattern
127.0.0.1:6379> keys k*
1) "k1"
2) "k3"
3) "k2"
4) "key"

del 刪除

DEL key [key ...]
127.0.0.1:6379> del k1 k2 k3
(integer) 3

exists 是否存在

EXISTS key [key ...]
127.0.0.1:6379> exists test
(integer) 1
127.0.0.1:6379> exists mytest
(integer) 0

expires 生存時(shí)間設(shè)置(重要)

Redis在實(shí)際的使用過(guò)程中,更多的是作為緩存,而緩存的數(shù)據(jù)一般都是要設(shè)置生存時(shí)間的,到期后數(shù)據(jù)自動(dòng)銷(xiāo)毀

# 設(shè)置過(guò)期時(shí)間(單位:秒)
EXPIRES key seconds  
# 設(shè)置過(guò)期時(shí)間(單位:毫秒)
PEXPIRES key milliseconds 
# 查看key剩余的生存時(shí)間
TTL key
PTTL key
# 清除生存時(shí)間
PERSIST key
127.0.0.1:6379> expire test 5
(integer) 1
127.0.0.1:6379> ttl test
(integer) 2
127.0.0.1:6379> ttl test
(integer) -2
127.0.0.1:6379> get test
(nil)

rename 重命名

RENAME key newkey
127.0.0.1:6379> keys *
1) "counter"
127.0.0.1:6379> rename counter coounter_new
OK
127.0.0.1:6379> keys *
1) "coounter_new"

type 查看數(shù)據(jù)類(lèi)型

TYPE key
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list

到此,相信大家對(duì)“Redis介紹和安裝方法”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI