本篇內(nèi)容主要講解“redis介紹和安裝方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Redis介紹和安裝方法”吧!
雄縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
Redis是用C語言開發(fā)的一個開源(BSD許可)的高性能鍵值對(key-value
)內(nèi)存數(shù)據(jù)庫,可以用作數(shù)據(jù)庫、緩存和消息中間件。它是一種NOSQL(NOT-Only Sql,泛指非關(guān)系型數(shù)據(jù)庫)數(shù)據(jù)庫
性能優(yōu)秀,數(shù)據(jù)在內(nèi)存中,讀寫速度非???,支持并發(fā)10W QPS
單進程單線程,是線程安全的,采用IO多路復用
豐富數(shù)據(jù)類型:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets) 等
支持數(shù)據(jù)持久化,可以將內(nèi)存中數(shù)據(jù)保存在磁盤中,重啟時加載
主從復制
內(nèi)存數(shù)據(jù)庫(登錄信息、購物車信息、用戶瀏覽記錄等)
緩存服務(wù)器(商品數(shù)據(jù)、廣告數(shù)據(jù)等等)(最多使用)
解決分布式集群架構(gòu)中的 session 分離問題( session 共享)
任務(wù)隊列(秒殺、搶購、12306等等)
分布式鎖的實現(xiàn)
支持發(fā)布訂閱的消息模式
應(yīng)用排行榜(有序集合)
網(wǎng)站訪問統(tǒng)計
數(shù)據(jù)過期處理(可以精確到毫秒)
Redis沒有官方的Windows版本,建議在Linux系統(tǒ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
進入目錄、編譯
$ cd redis-5.0.5 $ make
編譯完成的二進制文件是在src目錄下,其中redis-server
為服務(wù)端程序,redis-cli
為客戶端程序
安裝
還可以通過make install
命令安裝到指定目錄,通過PREFIX
指定安裝目錄
$ make install PREFIX=/usr/local/redis
redis-server
:啟動 redis 服務(wù)
redis-cli
:進入 redis 命令客戶端
redis-benchmark
: 性能測試的工具
redis-check-aof
: aof 文件進行檢查的工具
redis-check-dump
: rdb 文件進行檢查的工具
redis-sentinel
: 啟動哨兵監(jiān)控服務(wù)
啟動Redis的命令為redis-server
,運行安裝目錄下的redis-server
$ /usr/local/redis/bin/redis-server
關(guān)閉ctrl+c
,這種方式啟動,我們的連接窗口關(guān)閉,Redis也會關(guān)閉,我們會希望它在后臺一直運行著,就需要后端啟動
后端啟動(守護進程啟動)‘
1)從解壓文件中redis-5.0.5
復制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 # 默認綁定的是回環(huán)地址,默認不能被其他機器訪問 # bind 127.0.0.1 # 是否開啟保護模式,由yes該為no protected-mode no
3)啟動redis-server服務(wù)
./redis-server redis.conf
4)關(guān)閉服務(wù)
./redis-cli shutdown
啟動客戶端的命令是redis-cli
,它有兩個參數(shù)
-h
:redis服務(wù)器的ip地址(默認為127.0.0.1)
-p
:redis實例的端口號(默認為6379)
./redis-cli -h 127.0.0.1 -p 6379
雖然官方并沒有Windows版本,但是Microsoft有開發(fā)和維護64位的Redis,下載地址為https://github.com/microsoftarchive/redis/releases
這里下載Redis-x64-xxx.zip并解壓,進入解壓后的目錄,以下命令是啟動redis
redis-server redis.windows.conf
客戶端連接為
redis-cli.exe -h 127.0.0.1 -p 6379
Redis是通過key-value
的格式來存儲數(shù)據(jù)的,key
是二進制安全的字符串,其中value
是支持多種數(shù)據(jù)類型的,我們需要了解和掌握如下5種數(shù)據(jù)類型
字符串(String):二進制安全的字符串,可以是字符串、整數(shù)或浮點數(shù)
散列(Hash):一個String類型的field和value的映射表,適合存儲對象
列表(List):字符串列表,按插入順序排序
集合(Set):字符串無序集合,去重
有序集合(Sorted Set,zset):與Set相同,不同的是根據(jù)score排序
set/get 賦值/取值
語法
# 賦值 SET key value [EX seconds] [PX milliseconds] [NX|XX] # 取值 GET key # 設(shè)置新值,返回舊值 GETSET key value
EX seconds
:鍵過期時間
PX milliseconds
:為鍵設(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ù)值增減
當value值為整數(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è)置/獲取多個鍵值是可以減少延遲的
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"
常規(guī)的key-value
緩存
計數(shù):微博數(shù)、粉絲數(shù)等
應(yīng)用INCR原子計數(shù)生產(chǎn)全局唯一id或單號
hset/hget/hmset/hmget 設(shè)置/取值
# 設(shè)置一個字段值 HSET key field value # 設(shè)置多個字段值 HMSET key field value [field value ...] # 字段不存在時賦值 HMSETNX key field value # 獲取一個字段值 HGET key field # 獲取多個字段值 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
Hash類型適合存儲那些對象數(shù)據(jù),特別是對象屬性經(jīng)常發(fā)生【增刪改】操作的數(shù)據(jù)。 String類型也可以存儲對象數(shù)據(jù),將Java對象轉(zhuǎn)成json字符串或序列化進行存儲,這種存儲適合【查詢】操作
存儲結(jié)構(gòu)化數(shù)據(jù)對象,如用戶信息、商品信息
Redis的列表是鏈表結(jié)構(gòu)的,可以存儲一個有序的字符串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段
列表類型內(nèi)部是使用雙向鏈表(double linked list)實現(xiàn)的,所以向列表兩端添加元素的時間復雜度為0(1) ,獲取越接近兩端的元素速度就越快。這意味著即使是一個有幾千萬個元素的列表,獲取頭部或尾部的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
開始,索引可以是負數(shù),表明從結(jié)尾開始計數(shù):所以-1是最后一個元素,-2是列表的倒數(shù)第二個元素
LRANGE key start stop
127.0.0.1:6379> lrange list:1 0 2 1) "2" 2) "1" 3) "4"
lpop/rpop 從列表兩端彈出元素
從列表兩端彈出一個元素,會分兩步完成:
第一步是將列表左邊的元素從列表中移除
第二步是返回被移除的元素值
LPOP key RPOP key
127.0.0.1:6379>lpop list:1 "3“ 127.0.0.1:6379>rpop list:1 "6“
其他命令
# 獲取列表中元素的個數(shù) LLEN key # 刪除列表中指定個數(shù)的值 # - 當count>0時, LREM會從列表左邊開始刪除。 # - 當count<0時, LREM會從列表后邊開始刪除。 # - 當count=0時, LREM刪除所有值為value的元素 LREM key count value # 獲取指定索引的元素值 LINDEX key index # 只保留列表指定片段,指定范圍和lrange一致 LTRIM key start stop # 向列表中插入元素 LINSERT key BEFORE|AFTER pivot value # 將元素從一個列表轉(zhuǎn)移到另一個列表中 RPOPLPUSH source destination
各種列表:關(guān)注列表、粉絲列表、評論
消息隊列,可以利用Lists的PUSH操作,將任務(wù)存在Lists中,然后工作線程再用POP操作將任務(wù)取出執(zhí)行
利用LRANGE可以很方便的實現(xiàn)list內(nèi)容分頁的功能
取最新N個數(shù)據(jù)的操作
Set是字符串的無序集合,其中的數(shù)據(jù)是不重復且沒有順序,集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由于集合類型的Redis內(nèi)部是使用值為空的散列表實現(xiàn),所有這些操作的時間復雜度都為 0(1),Redis 還提供了多個集合之間的交集、并集、差集的運算
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 差集/交集/并集運算命令
SDIFF - 集合的差集運算 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 - 集合的交集運算 A ∩ B:屬于A且屬于B的元素構(gòu)成的集合
SINTER key [key ...]
127.0.0.1:6379> sinter setA setB 1) "2" 2) "3"
SUNION - 集合的并集運算 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"
其它命令
# 獲得集合中元素的個數(shù) SCARD key # 從集合中隨機彈出一個元素 SPOP key
需要去重的列表
提供了求交集、并集、差集等操作,可以非常方便的實現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能
有序集合(Sorted Set,zset)在Set集合類型的基礎(chǔ)上,有序集合類型為集合中的每個元素都關(guān)聯(lián)一個分數(shù)(score) ,這使得我們不僅可以完成插入、刪除和判斷元素是否存在在集合中,還能夠獲得分數(shù)最高或最低的前N個元素、獲取指定分數(shù)范圍內(nèi)的元素等與分數(shù)有關(guān) 的操作
相似點
二者都是有序的,List是按數(shù)據(jù)插入順序,SortedSet是根據(jù)score自然排序
二者都可以獲得某一范圍的元素
區(qū)別
列表類型是通過鏈表實現(xiàn)的,獲取靠近兩端的數(shù)據(jù)速度極快,而當元素增多后,訪問中間數(shù)據(jù)的速度會變慢
有序集合類型使用散列表實現(xiàn),所有即使讀取位于中間部分的數(shù)據(jù)也很快
列表中不能簡單的調(diào)整某個元素的位置,但是有序集合可以(通過更改分數(shù)實現(xiàn))
有序集合要比列表類型更耗內(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 獲取范圍元素列表
獲得排名在某個范圍的元素列表。
ZRANGE:按照元素分數(shù)從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)
ZREVRANGE:按照元素分數(shù)從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素)
# 如果需要獲得元素的分數(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 獲取元素的分數(shù)
ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi "97"
其它命令
# 獲得指定分數(shù)范圍的元素 ZRANGEBYSCORE key min max [WITHSCORES] # 增加某個元素的分數(shù) ZINCRBY key increment member # 獲得集合中元素的數(shù)量 ZCARD key # 獲得指定分數(shù)范圍內(nèi)的元素個數(shù) ZCOUNT key min max # 按照排名范圍刪除元素 ZREMRANGEBYRANK key start stop # 按照分數(shù)范圍刪除元素 ZREMRANGEBYSCORE key min max # 獲取元素的排名 # - ZRANK:從小到大 # - ZREVRANK:從大到小 ZRANK key member ZREVRANK key member
存放一個有序的并且不重復的集合列表
排行榜相關(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è)置(重要)
Redis在實際的使用過程中,更多的是作為緩存,而緩存的數(shù)據(jù)一般都是要設(shè)置生存時間的,到期后數(shù)據(jù)自動銷毀
# 設(shè)置過期時間(單位:秒) EXPIRES key seconds # 設(shè)置過期時間(單位:毫秒) PEXPIRES key milliseconds # 查看key剩余的生存時間 TTL key PTTL key # 清除生存時間 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ù)類型
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
到此,相信大家對“Redis介紹和安裝方法”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!