Redis的安裝配置與命令操作
1.儲存資料與資料庫分類
1.1 儲存資料型別分類
- 結構化資料:可以通過二維表格形式表述這個資料(使用者名稱,密碼)
- 非結構化資料:不方便以二維表格形式表述的這種型別的資料(圖片)
1.2 根據不同種儲存資料型別分類
- sql結構化資料庫:裡面儲存的資料型別是結構化資料。別稱稱為關係型資料庫
- nospl非結構化資料庫:裡面儲存的資料型別是非結構化資料。別稱稱為非關係型資料庫
1.3 關聯式資料庫與非關聯式資料庫
1.3.1 關聯式資料庫
- 一個結構化的資料庫,建立在關係模型基礎上;
- 一般面向於記錄;
- 包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2等。
1.3.2 非關係型資料庫
- 不須建立連線,只存資料本身,存取,讀取速度快於關聯式資料庫;
- 除了主流的關係型資料庫外的資料庫,都認為是非關係型;
- 包括Redis、MongBD、Hbase、CouhDB等。
1.3.3 非關係型資料庫產生背景
- High performance—對資料庫高併發讀寫需求
- Huge Storage———對海量資料高效儲存與訪問需求
- High Scalability && High Availability———對資料庫高可擴充套件性與高可用性需求
2.Redis介紹
2.1 Redis簡介
- Redis基於記憶體執行並支援持久化
- 採用key-value(鍵值對)的儲存形式
key:關鍵詞
value:關鍵詞值
- 優點
具有極高的資料讀寫速度
支援豐富的資料型別
支援資料的持久化
原子性(資料儲存方式不可分割,最簡)
支援資料備份(可選擇資料備份位置)
2.2 Redis概述
- redis(remote dictionary server,遠端字典服務)是一個開源的使用ANSIC語言編寫、遵守BSD協議,支援網路,可基於記憶體可持久化的日誌型、key-Value的資料庫,並提供多種語言的API;
- 它通常被稱為結構伺服器,因為值(value)可以是字串(string),雜湊(hash),列表(list),集合(sets)和有序集合(sorted sets)等型別;
- redis是完全開源免費的,是一個高效能的key-value資料庫。
2.3 Redis的特點與優勢
- 特點:
redis支援資料的持久化,可以將記憶體中的資料庫儲存在磁碟中,重啟的時候可以再次載入進行使用
redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存
redis支援資料的備份,即master-slave模式的資料備份(下一篇將會詳述redis群集)
- 優勢:
效能極高-redis的讀的速度是110000次/s,寫的速度是81000次/s
豐富的資料型別-redis支援二進位制案例的strings,lists,hashes,sets以及ordered sets資料型別操作
原子-redis的所有操作都是原子性的,意思就是要麼成功執行要麼完全不執行。單個操作是原子性的,多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來
豐富的特性-redis還支援publish/subscribe通知,key過期等特性
2.4 Redis與其他key-value的不同
redis有著更為複雜的資料結構並且提供對他們的原子操作,這是一個不同於其他資料庫的進化路徑;
redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象;
redis執行在記憶體中,但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料不能大於硬體記憶體。
在記憶體資料庫方面的另外一個優點是,相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣redis可以做很多內部複雜性很強的事情;
同時,在磁碟格式方面他們是緊湊的以追加的方式生產的,因為他們不需要進行隨機訪問
2.5 使用場景
-
會話快取(Session Cache)
最常用的一種使用Redis的情景是會話快取(session cache)。用Redis快取會話比其他儲存(如Memcached)的優勢在於:Redis提供持久化。 -
全頁快取(FPC)
除基本的會話token之外,Redis還提供很簡便的FPC平臺。回到一致性問題,即使重啟了Redis例項,因為有磁碟的持久化,使用者也不會看到頁面載入速度的下降,這是一個極大改進,類似PHP本地FPC。 -
佇列
Reids在記憶體儲存引擎領域的一大優點是提供 list 和 set 操作,這使得Redis能作為一個很好的訊息佇列平臺來使用。Redis作為佇列使用的操作,就類似於本地程式語言(如Python)對 list 的 push/pop 操作。 -
排行榜/計數器
Redis在記憶體中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種資料結構。所以,我們要從排序集合中獲取到排名最靠前的10個使用者–我們稱之為“user_scores”,我們只需要像下面一樣執行即可:當然,這是假定你是根據你使用者的分數做遞增的排序。如果你想返回使用者及使用者的分數,你需要這樣執行:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games就是一個很好的例子,用Ruby實現的,它的排行榜就是使用Redis來儲存資料的,你可以在這裡看到。 -
釋出/訂閱
最後是Redis的釋出/訂閱功能。釋出/訂閱的使用場景也是非常多的 -
其他
但是如果是對快取的資料格式有更多的要求,且對安全性也有很高的要求的話,建議還是使用redis,這也是redis目前正在逐漸代替memcached的根本原因。
2.6 Redis與Memcached區別
Memcached | Redis | |
---|---|---|
型別 | Key-value資料庫 | Key-value資料庫 |
過期策略 | 支援 | 支援 |
資料型別 | 單一資料型別 | 五大資料型別 |
持久化 | 不支援 | 支援 |
主從複製 | 不支援 | 支援 |
虛擬記憶體 | 不支援 | 支援 |
3.Redis解析
Redis支援五種資料型別:
- string(字串)
- hash(雜湊)
- list(列表)
- set(集合)
- zset (sorted set:有序集合)
3.1 String (字串) 詳解
-
string是redis最基本的型別,你可以理解成與 Memcached 一模一樣的型別,一個key對應一個value;
-
string 型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的物件;
-
string 型別是Redis最基本的資料型別,string型別的值最大能儲存 512MB;
-
用法示例:
set 鍵值 設定鍵值; get 鍵值 (獲取鍵的值)
set:設定
get:獲取
Set sting1 6
sting1:鍵名
鍵值為6
設定鍵值為6
Get string1
6
獲取鍵值為6
Incr string1
7
Incr:字增長 +1
Decr string1
5
Decr:自降 -1
Decrby string1 2
4
設定下降值為2
6-2=4
Incrby string1 4
10
設定增值為4
6+4=10
3.2 Hash (雜湊) 詳解
- Redis hash 是一個鍵值(key=>value)對集合。
- Redis hash 是一個 string 型別的 field 和 value 的對映表,hash 特別適合用於儲存物件。
- 用法示例:
Hset:新增hash資料
Hget:獲取hash資料
Hmget:獲取多個hash資料
Hset hash1 key1 a
key1:關鍵詞1
設定欄位關鍵詞值為a
Hset hash1 key2 b
Hget hash1 key1
獲取欄位關鍵詞值
Hmget hash1 key1 key2
獲取多個欄位關鍵詞值
3.3 List(列表)
- Redis 列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。
- 用法示例:
Lpush:從左邊推入值
Lpop:從左邊彈出值
Rpush:從右邊推入值
Rpop:從右邊彈出值
Llen:檢視某個list資料型別的長度
Lpush list1 1
從左邊輸入值 1
list1:鍵值名稱
Lpush list1 2
Lpush list1 3
Llen list1
3
儲存列表長度 3
Rpop list1
1
從右邊輸出第一個鍵值為 1
Llen list1
2
Lrange list1 列出所有list1的值
3.4 Set (集合)
-
Redis 的 Set 是 string 型別的無序集合;
-
集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是 0/1;
-
sadd 命令:新增一個 string 元素到 key 對應的 set 集合中,成功返回 1,如果元素已經在集合中返回 0
sadd key member
scard:檢視set資料中存在的元素個數
sismember:判斷set資料中是否存在某個元素
srem:刪除某個set資料中的元素
- 用法示例:
sadd set1 12
1
新增鍵值12,12未存在時則新增成功輸出返回1
sadd set1 13
1
sadd set1 12
0
新增鍵值12,12已存在則新增失敗輸出返回0
Scard set1
2
檢視set資料中存在的元素個數,個數2個
Sismember set1 11
0
判斷set資料中是否存在鍵值11,不存在輸出返回0
Sismember set1 13
1
Srem set1 13
1
刪除鍵值13 操作成功輸出返回1
Sismember set1 13
0
Smembers set1 列出set1所有值
3.5 zset (sorted set:有序集合)
-
Redis zset 和 set 一樣也是string型別元素的集合,且不允許重複的成員。
-
不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
-
zset的成員是唯一的,但分數(score)卻可以重複。
zadd 命令
新增元素到集合,元素在集合中存在則更新對應score
使用方法:zadd key score member
zcard:查詢
zrang:資料排序
- 用法示例:
Zadd zset1 1.1 val1
新增 鍵值 分數1.1 成員
Zadd zset1 2.2 val2
Zadd zset1 3.3 val3
Zadd zset1 3.3 val33
Zcard zset1
4
查詢鍵值個數為4個
Zrangebyscore zset1 0 10
在0-10個成員中,進行排序(最多11個成員)
1) val1
2) val2
3) val3
4) val33
Zrange zset1 0 10 withscores
在0-10個成員中,進行排序,帶上分數(最多11個成員)
1) val1
2) 1.10000000000000001
3) Val2
4) 2.20000000000000002
5) Val3
6) 3.29999999999999998
7) Val33
8) 3.29999999999999998
3.6 各個資料型別應用場景解析
4.Redis應用部署
4.1 部署流程
4.1.1 匯入redis軟體包
新增安裝包
redis-5.0.4.tar.gz
4.1.2 解壓縮
[root@server1 ~]# tar zxvf redis-5.0.4.tar.gz
4.1.3 設定編輯檔案
[root@localhost ~]# cd redis-5.0.4/
[root@localhost redis-5.0.4]# make //進行配置
[root@localhost redis-5.0.4]# make PREFIX=/usr/local/redis install
//更改安裝路徑可以用make PREFIX=安裝路徑 install
4.1.4 建立連結
[root@localhost redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/local/bin
[root@localhost redis-5.0.4]# cd /usr/local/redis/bin/
[root@localhost bin]# ls -lh //檢視命令服務
4.1.5 安裝資料庫
[root@localhost ~]# cd redis-5.0.4/utils/
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
4.1.6 檢視埠服務並修改配置檔案
[root@localhost ~]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 57740/redis-server
[root@localhost ~]# vi /etc/redis/6379.conf
...//省略部分資訊
bind 192.168.140.20 127.0.0.1 //新增本機地址
4.1.7 重啟並連線redis服務
[root@localhost ~]# /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@localhost ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@localhost ~]# redis-cli -h 192.168.140.20 -p 6379
192.168.140.20:6379>
4.2 五種資料型別的應用
4.2.1 String字串的應用
[root@localhost ~]# redis-cli -h 192.168.140.20 -p 6379
192.168.140.20:6379> set yy 7 //設定yy的值為7
OK
192.168.140.20:6379> get yy //獲取yy的值
"7"
192.168.140.20:6379> type yy //檢視yy的狀態型別
string
192.168.140.20:6379> incr yy //設定自增+1
(integer) 8 //integer表示整數
192.168.140.20:6379> get yy //獲取yy的值
"8"
192.168.140.20:6379> decr yy //設定自減-1
(integer) 7
192.168.140.20:6379> get yy
"7"
192.168.140.20:6379> incrby yy 2 //設定增值為2
(integer) 9
192.168.140.20:6379> get yy
"9"
192.168.140.20:6379> decrby yy 5 //設定降值為5
(integer) 4
192.168.140.20:6379>
4.2.2 Hash的應用
[root@localhost ~]# redis-cli -h 192.168.140.20 -p 6379
192.168.140.20:6379> hset hash1 key1 kp //設定欄位key1為kp,注意重新設定時會覆蓋上一次的內容
(integer) 1
192.168.140.20:6379> hset hash1 key2 kpp //設定欄位key2為kpp
(integer) 1
192.168.140.20:6379> hset hash1 key3 kkpp //設定欄位key3為kkpp
(integer) 1
192.168.140.20:6379> hset hash1 field1 k1 field2 k2 //存入多個欄位,分別為k1和k2
(integer) 2
192.168.140.20:6379> hget hash key1 //獲取欄位key1
"kp"
192.168.140.20:6379> hget hash key2 //獲取欄位key2
"kpp"
192.168.140.20:6379> hget hash key3 //獲取欄位key3
"kkpp"
192.168.140.20:6379> hmget hash1 field1 field2 //獲取多個 欄位field1為k1,field2為k2
1) "k1"
2) "k2"
192.168.140.20:6379> hmget hash1 key1 key2 key3 field1 field2 //獲取多個欄位
1) "kpp"
2) "kpp"
3) "kkpp"
4) "k1"
5) "k2"
192.168.140.20:6379>
4.2.3 List(列表)的應用
- 原則:左進右出,左進左出
- lpush:從左邊推入值lpop
[root@localhost ~]# redis-cli -h 192.168.140.20 -p 6379
192.168.140.20:6379> lpush list1 5
(integer) 1
192.168.140.20:6379> lpush list1 15
(integer) 2
192.168.140.20:6379> lpush list1 25
(integer) 3
- 左出第一個列表
192.168.140.20:6379> lpop list1
"25"
//從左邊彈出值rpush,從右邊推入值rpop
- 檢視列表長度
192.168.140.20:6379> llen list1
(integer) 2
- 列出所有list1的值
192.168.140.20:6379> lrange list1 0 25
1) "15"
2) "5"
- 從右邊彈出值
192.168.140.20:6379> rpop list1
"5"
- 再次列出所有list1的值
192.168.140.20:6379> lrange list1 0 25
1) "15"
4.2.4 Set(集合)無序集合的應用
192.168.140.20:6379> sadd set1 10 //新增鍵值10,未存在新增成功時則輸出1
(integer) 1
192.168.140.20:6379> sadd set1 20 //新增鍵值20
(integer) 1
192.168.140.20:6379> sadd set1 20 //新增鍵值20,已存在,新增失敗輸出0
(integer) 0
192.168.140.20:6379> sadd set1 30 //新增鍵值30
(integer) 1
192.168.140.20:6379> scard set1 //檢視set資料中的鍵值個數為3個
(integer) 3
192.168.140.20:6379> sismember set1 40 //判斷鍵值40是否存在set資料中,不存在則輸出0
(integer) 0
192.168.140.20:6379> sismember set1 10 //判斷鍵值10是否存在set資料中,存在則輸出1
(integer) 1
192.168.140.20:6379> srem set1 10 //刪除鍵值10,成功輸出1
(integer) 1
192.168.140.20:6379> sismember set1 10
(integer) 0
192.168.140.20:6379> smembers set1 //列出set資料上的所有鍵值,數字從小到大列出(若新增的是字母則不會進行排序)
1) "20"
2) "30"
4.2.5 zset(無序集合)的應用
- 新增元素到集合,元素在集合中存在則更新對應score
192.168.140.20:6379> zadd zset1 2 val1
(integer) 1
192.168.140.20:6379> zadd zset1 6 val2
(integer) 1
192.168.140.20:6379> zadd zset1 7.7 val3
(integer) 1
192.168.140.20:6379> zadd zset1 8 val4
(integer) 1
192.168.140.20:6379> zadd zset1 9 val5
(integer) 1
- 檢視值
192.168.140.20:6379> zrangebyscore zset1 0 10
1) "val1"
2) "val2"
3) "val5"
4) "val3"
5) "val4"
- zrang:資料排序,連帶成員和分數
192.168.140.20:6379> zrange zset1 0 10 withscores
1) "val1"
2) "2"
3) "val2"
4) "6"
5) "val5"
6) "9"
7) "val3"
8) "7.7000000000000002"
9) "val4"
10) "8"
相關文章
- Redis的安裝與配置Redis
- 【Redis】安裝與配置Redis
- [Redis] 安裝與配置Redis
- Centos安裝與配置RedisCentOSRedis
- CentOS 7 yum 安裝與配置 RedisCentOSRedis
- linux安裝配置與基本命令Linux
- Redis資料庫的安裝與基礎命令Redis資料庫
- 【Redis】Redis的操作命令(一)——Redis Key命令Redis
- CentOS redis安裝配置CentOSRedis
- Redis安裝與配置(學習筆記一)Redis筆記
- centos7 (阿里雲、linux) 單機spark的安裝與配置詳解(jdk安裝與配置,scala安裝與配置,hadoop安裝與配置,spark安裝與配置)CentOS阿里LinuxSparkJDKHadoop
- 本地windows搭建spark環境,安裝與詳細配置(jdk安裝與配置,scala安裝與配置,hadoop安裝與配置,spark安裝與配置)WindowsSparkJDKHadoop
- windows上安裝配置redisWindowsRedis
- Linux & Windows 環境下 Redis 安裝與基本配置LinuxWindowsRedis
- Redis(1)- Redis資料庫的安裝和配置Redis資料庫
- Linux上的redis的安裝和配置LinuxRedis
- Mac Redis安裝與解除安裝MacRedis
- Windows下安裝Redis及使用Python操作Redis的方法WindowsRedisPython
- php安裝redis擴充套件及操作redisPHPRedis套件
- Redis 安裝與使用Redis
- Vue的安裝與配置Vue
- MariaDB的安裝與配置
- Centos7.9安裝配置redisCentOSRedis
- Redis 6.0 安裝 + 持久化配置Redis持久化
- redis系列:redis介紹與安裝Redis
- linux下安裝redis 單節點安裝操作步驟LinuxRedis
- redis介紹與安裝Redis
- Redis 偽分散式安裝部署配置Redis分散式
- docker 安裝redis 以及配置連線DockerRedis
- Mac環境下安裝配置RedisMacRedis
- Nginx 安裝與配置Nginx
- Spark安裝與配置Spark
- Telnet安裝與配置
- 【MySQL】安裝與配置MySql
- jdk安裝與配置JDK
- MacVim安裝與配置Mac
- 【MongoDB】安裝與配置MongoDB
- Rabbitmq安裝與配置MQ