Redis入門之Redis安裝、配置及常用指令

NoSQL 引言

NoSQL(Not Only SQL),意思是 不僅僅是SQL,泛指 非關係型數據庫。NoSQL 這個技術門類,早期就有人提出,發展至2009年趨勢越發高漲。

NoSQL 數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要制定數據模型,許多 NoSQL數據庫都有 REST式的數據接口或者查詢API。

爲什麼使用 NoSQL?

隨着互聯網網站的興起,傳統的關係數據庫在應付動態網站,特別是超大規模和高併發的純動態網站已經顯得力不從心,暴露了很多難以克服的問題。如:商城網站中對商品數據頻繁查詢、對熱搜商品的排行統計、訂單超時問題、以及微信朋友圈(音頻,視頻)存儲等相關需求 使用傳統的關係型數據庫實現就顯得非常複雜,雖然能實現相應功能但是在性能上卻不是那麼樂觀。NoSQL 這個技術門類的出現,更好的解決了這些問題,它告訴了世界不僅僅是SQL。

NoSQL 的四大分類(鍵值、列存儲、文檔、圖形)

1、鍵值(Key-Value)存儲數據庫
這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。

  • Key-Value 模型對於IT系統來說的優勢在於簡單、易部署。
  • 但是如果 DBA 只對部分值進行查詢或更新的時候,Key-Value就顯得效率低下。

相關產品

  • Tokyo Cabinet/Tyrant,
  • Redis
  • SSDB
  • Voldemort
  • Oracle BDB

2、列存儲數據庫
這部分數據庫通常是用來應對分佈式存儲的海量數據

特點:鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。

相關產品:Cassandra、HBase、Riak.

3、文檔型數據庫
文檔型數據庫的靈感是來自於 Lotus Notes 辦公軟件,而且它同第一種鍵值存儲相類似,該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型數據庫可以看作是鍵值數據庫的升級版,允許之間嵌套鍵值。而且文檔型數據庫比鍵值數據庫的查詢效率更高

特點:以文檔形式存儲;

相關產品:MongoDB、CouchDB、 MongoDb(4.x)、SequoiaDB(國產,已經開源)。

4、圖形(Graph)數據庫
圖形結構的數據庫同其他行列以及剛性結構的SQL數據庫不同,它使用靈活的圖形模型,並且能夠擴展到多個服務器上。

相關產品:Neo4J、InfoGrid、 Infinite Graph

NoSQL 應用場景

  • 數據模型比較簡單;
  • 需要靈活性更強的 IT 系統;
  • 對數據庫性能要求較高
  • 不需要高度的數據一致性(事務的支持),性能要求高則說明允許數據有略微的偏差。

Redis 介紹

在這裏插入圖片描述

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

Redis 開源、遵循BSD協議、基於內存數據存儲,被用於作爲 數據庫、緩存、消息中間件
重點:Redis 是一個內存型的數據庫


Redis 特點

  • Redis 是一個 高性能 key/value內存型數據庫
  • Redis 擁有豐富的數據類型
  • Redis 支持持久化
  • Redis 單線程,單進程

Redis 安裝 與 配置

環境準備:

  • vmware15.x+
  • centos7.x+

Redis 官網下載源碼包:https://redis.io/

下載後上傳到 Linux 中,解壓縮文件:

tar -zxvf redis-4.0.10.tar.gz # 解壓Redis源碼包
ll # 查看當前文件目錄

在這裏插入圖片描述
centos7 安裝 gcc:

yum install -y gcc

進入解壓縮目錄執行如下命令:

make MALLOC=libc

編譯完成後執行如下命令:

make install PREFIX=/usr/redis

進入 /usr/redis 目錄啓動 Redis 服務:

./redis-server

在這裏插入圖片描述
Redis服務端口默認:6379

再打開一個命令行,進入 bin 目錄執行客戶端連接操作:

./redis-cli –p 6379

Redis 啓動服務的細節(加載配置啓動)

注:直接使用 ./redis-server 方式啓動使用的是 redis-server 這個 shell 腳本中默認配置;

如何在啓動 Redis 時指定配置文件啓動?
默認在redis安裝完成之後再安裝目錄沒有任何配置文件,需要在源碼目錄中複製 redis.conf 配置文件到安裝目錄;

cp redis.conf /usr/ redis

加載配置啓動 Redis:

./redis-server ../redis.conf

修改 redis 默認端口號:

vi redis.conf # 修改裏面 port 7000, 保存退出

開啓 Redis 遠程連接

默認 Redis 服務器沒有開啓遠程連接,也就是默認拒絕所有遠程客戶端連接;

1、修改配置文件開啓遠程連接:

vim redis.conf # 修改配置文件

修改 bind 127.0.0.1bind 0.0.0.0,表示 允許一切客戶端連接
在這裏插入圖片描述
2、修改配置後重啓 Redis 服務:一定要加載配置文件啓動!

./redis-server ../redis.conf

我使用的是 Redis Desktop Manager 連接 Linux 下的 Redis:

如果連接失敗,關閉防火牆 後重新連接:

systemctl stop firewalld.service

Redis 端口占用(kill redis-server 進程)

啓用 Redis 出現:

Creating Server TCP listening socket *:6379: bind: Address already in use

6379 地址已經在使用(6379是 Redis 默認的端口)

解決方法:找到 redis-server 的進程 kill 掉

ps -ef | grep -i redis

在這裏插入圖片描述

kill -9 2700

Redis 常用指令

數據庫相關指令

Redis 庫
庫是 database 用來存放數據的一個基本單元,每個庫都可以存放獨立的 key-value 鍵值對,Redis 中每一個庫都有一個唯一名稱/編號,從 0 開始。

  • 默認庫的個數:16 個(可以在配置文件中修改),庫的編號:0 - 15,默認使用 0號庫;
  • 切換庫的命令:select dbid(庫編號)

Redis 操作庫的指令

  • 清空當前的庫:FLUSHDB
  • 清空全部的庫:FLUSHALL

Redis 客戶端顯示中文
啓動 Redis 時後面添加:--raw

./redis-cli  -p 7000 --raw

Key 相關指令

DEL 指令

  • 語法 : DEL key [key ...]
  • 作用 : 刪除給定的一個或多個 key,不存在的 key 會被忽略。
  • 可用版本: >= 1.0.0
  • 返回值: 被刪除 key 的數量。

EXISTS 指令

  • 語法: EXISTS key
  • 作用: 檢查給定 key 是否存在。
  • 可用版本: >= 1.0.0
  • 返回值: 若 key 存在,返回1 ,否則返回0。

EXPIRE 指令

  • 語法: EXPIRE key seconds
  • 作用: 爲給定 key 設置生存時間(秒),當 key 過期時(生存時間爲 0),它會被自動刪除。
  • 可用版本: >= 1.0.0
  • 時間複雜度: O(1)
  • 返回值:設置成功返回 1 。

KEYS 指令

  • 語法 : KEYS pattern
  • 作用 : 查找所有符合給定模式 pattern 的 key 。
  • 語法:
    KEYS *:匹配數據庫中所有 key 。
    KEYS h?llo:匹配 hello ,hallo 和 hxllo 等。
    KEYS h*llo:匹配 hllo 和 heeeeello 等。
    KEYS h[ae]llo: 匹配 hello 和 hallo ,但不匹配 hillo 。特殊符號用 \ 隔開
  • 可用版本: >= 1.0.0
  • 返回值: 符合給定模式的 key 列表。

MOVE 指令

  • 語法 : MOVE key db
  • 作用 : 將當前數據庫的 key 移動到給定的數據庫 db 當中。
  • 可用版本: >= 1.0.0
  • 返回值: 移動成功返回 1 ,失敗則返回 0 。

PEXPIRE 指令

  • 語法 : PEXPIRE key milliseconds
  • 作用 : 這個命令和 EXPIRE 命令的作用類似,但是它以 毫秒 爲單位設置 key 的生存時間
    EXPIRE 以秒爲單位)
  • 可用版本: >= 2.6.0
  • 時間複雜度: O(1)
  • 返回值:設置成功,返回1。key 不存在或設置失敗,返回0

PEXPIREAT 指令

  • 語法 : PEXPIREAT key milliseconds-timestamp
  • 作用 : 這個命令和 EXPIREAT 命令類似,但它以 毫秒 爲單位設置 key 的過期 unix 時間戳(EXPIREAT 以秒爲單位)
  • 可用版本: >= 2.6.0
  • 返回值:如果生存時間設置成功,返回 1 。當 key 不存在或沒辦法設置生存時間時,返回 0 。
    (查看EXPIRE 命令獲取更多信息)

TTL 指令

  • 語法 : TTL key
  • 作用 : 以秒爲單位,返回給定 key 的剩餘生存時間(TTL, time to live)。
  • 可用版本: >= 1.0.0
  • 返回值:
    當 key 不存在時,返回 -2 。
    當 key 存在但沒有設置剩餘生存時間時,返回 -1 。
    否則,以秒爲單位,返回 key 的剩餘生存時間。
  • Note : Redis 2.8 以前,當 key 不存在,或者 key 沒有設置剩餘生存時間時,命令都返回 -1 。

PTTL 指令

  • 語法 : PTTL key
  • 作用 : 這個命令類似於 TTL 命令,但它以毫秒爲單位返回 key 的剩餘生存時間
    (TTL 以秒爲單位)
  • 可用版本: >= 2.6.0
  • 返回值: 當 key 不存在時,返回 -2 。當 key 存在但沒有設置剩餘生存時間時,返回 -1 。
  • 否則,以毫秒爲單位,返回 key 的剩餘生存時間。
  • 注意 : Redis 2.8 以前,當 key 不存在,或者 key 沒有設置剩餘生存時間時,命令都返回 -1 。

RANDOMKEY 指令

  • 語法 : RANDOMKEY
  • 作用 : 從當前數據庫中隨機返回(不刪除) 一個 key 。
  • 可用版本: >= 1.0.0
  • 返回值:當數據庫不爲空時,返回一個 key 。當數據庫爲空時,返回 nil

RENAME 指令

  • 語法 : RENAME key newkey
  • 作用 : 將 key 改名爲 newkey 。
    當 key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。
    當 newkey 已經存在時,RENAME 命令將覆蓋舊值。
  • 可用版本: >= 1.0.0
  • 返回值: 改名成功時提示OK ,失敗時候返回一個錯誤。

TYPE 指令

  • 語法 : TYPE key
  • 作用 : 返回 key 所儲存的值的類型。
  • 可用版本: >= 1.0.0
  • 返回值:
    none:key 不存在
    string:字符串
    list:列表
    set:集合
    zset:有序集
    hash:哈希表

String 類型

內存存儲模型:
在這裏插入圖片描述

命令 說明
set 設置一個key/value
get 根據key獲得對應的value
mset 一次設置多個key value
mget 一次獲得多個key的value
getset 獲得原始key的值,同時設置新值
strlen 獲得對應key存儲value的長度
append 爲對應key的value追加內容
getrange 索引0開始 截取value的內容
setex 設置一個key存活的有效期(秒)
psetex 設置一個key存活的有效期(毫秒)
setnx 存在不做任何操作,不存在添加
msetnx原子操作(只要有一個存在不做任何操作) 可以同時設置多個key,只要有一個存在都不保存
decr 進行數值類型的-1操作
decrby 根據提供的數據進行減法操作
incr 進行數值類型的+1操作
incrby 根據提供的數據進行加法操作
incrbyfloat 根據提供的數據加入浮點數

List 類型

List 列表 相當於 Java 中的 List 集合,特點:元素有序 且 可以重複
在這裏插入圖片描述

命令 說明
lpush 將某個值加入到一個key列表頭部
lpushx 同lpush,但是必須要保證這個key存在
rpush 將某個值加入到一個key列表末尾
rpushx 同rpush,但是必須要保證這個key存在
lpop 返回和移除列表左邊的第一個元素
rpop 返回和移除列表右邊的第一個元素
lrange 獲取某一個下標區間內的元素
llen 獲取列表元素個數
lset 設置某一個指定索引的值(索引必須存在)
lindex 獲取某一個指定索引位置的元素
lrem 刪除重複元素
ltrim 保留列表中特定區間內的元素
linsert 在某一個元素之前,之後插入新元素

Set 類型

特點:Set 類型 相當於Java 中的 Set 集合;特點:元素無序、不可以重複;
在這裏插入圖片描述

命令 說明
sadd 爲集合添加元素
smembers 顯示集合中所有元素 無序
scard 返回集合中元素的個數
spop 隨機返回一個元素 並將元素在集合中刪除
smove 從一個集合中向另一個集合移動元素 必須是同一種類型
srem 從集合中刪除一個元素
sismember 判斷一個集合中是否含有這個元素
srandmember 隨機返回元素
sdiff 去掉第一個集合中其它集合含有的相同元素
sinter 求交集
sunion 求和集

ZSet 類型

特點:可排序的 Set 集合,不可重複;
在這裏插入圖片描述

命令 說明
zadd 添加一個有序集合元素
zcard 返回集合的元素個數
zrange 升序 zrevrange 降序 返回一個範圍內的元素
zrangebyscore 按照分數查找一個範圍內的元素
zrank 返回排名
zrevrank 倒序排名
zscore 顯示某一個元素的分數
zrem 移除某一個元素
zincrby 給某個特定元素加分

Hash 類型

特點:value 是一個 map 結構,存在 key、value,key 是無序的;
在這裏插入圖片描述

命令 說明
hset 設置一個key/value對
hget 獲得一個key對應的value
hgetall 獲得所有的key/value對
hdel 刪除某一個key/value對
hexists 判斷一個key是否存在
hkeys 獲得所有的key
hvals 獲得所有的value
hmset 設置多個key/value
hmget 獲得多個key的value
hsetnx 設置一個不存在的key的值
hincrby 爲value進行加法運算
hincrbyfloat 爲value加入浮點值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章