Redis入门_redis菜鸟教程(windows)
Redis快速入門
博主關于Redis高級特性的一些講解,傳送地址如下:
刪除策略與淘汰策略詳解
主從復制詳解
哨兵模式詳解
集群詳解
緩存預熱 & 緩存雪崩 & 緩存擊穿 & 緩存穿透
五大數據類型的應用場景
事務
布隆過濾器詳解
一、Redis概述
- 概念
Redis是用C語言開發的一個開源的高性能基于內存運行的鍵值對NoSQL數據庫
- 特征
(1) 支持數據的持久化,可以將數據保存在磁盤中,重啟之后可以再次加載到內存中使用
(2) 支持多種數據類型,除了KV類型的數據,還支持list、set、hash等數據結構
(3) 支持master-slave模式的數據備份
二、Redis應用場景
- 熱點數據加速查詢(主要場景),如熱點商品、熱點信息等訪問量較高的數據
- 即時信息查詢,如公交到站信息、在線人數信息等
- 時效性信息控制,如驗證碼控制、投票控制等
- 分布式數據共享,如分布式集群架構中的session分離消息隊列
三、Redis的下載和安裝
- 去官網下載redis-3.0.4.tar.gz安裝包,并放入Linux中的/opt目錄
- 在/opt目錄下,執行解壓命令tar -zxvf redis-3.0.4.tar.gz
- 解壓完成后出現文件夾redis-3.0.4
- 進入文件夾redis-3.0.4,在此目錄下執行make && make install命令
- 進入默認安裝目錄cd /usr/local/bin,此目錄中有如下文件
四、Redis服務的啟動
- 修改redis配置文件,
vim /opt/redis-3.0.4/redis.conf
-
啟動redis服務,
cd /usr/local/bin,執行redis-server /opt/redis-3.0.4/redis.conf -
查看服務是否啟動,
ps aux | grep redis-server
五、Redis命令行工具
六、Redis基礎知識
-
Redis采用單線程機制進行工作
-
Redis默認擁有16個數據庫,數據庫編號從0開始,默認使用0號數據庫
-
使用
select 數據庫編號可以切換使用的數據庫 -
dbsize命令查看當前數據庫key的數量 -
keys *命令查看當前數據庫所有的key -
flushdb命令清空當前數據庫 -
flushall命令清空所有數據庫 -
Redis中所有數據庫使用同一個密碼,默認沒有密碼,Redis認為安全層面應該由Linux來保證
-
Redis中所有索引都是從0開始
-
Redis默認端口是6379
七、Redis數據類型
1. key (鍵)
Redis有五大數據類型:String、List、Set、Zset、Hash
注意:Redis采用鍵值對存儲數據,key永遠是String類型,五大數據類型指的是value部分
2. String (字符串)
一個key對應一個value;String可以包含任何數據,比如jpg圖片等;String是Redis最基本的 數據類型,一個String的value最大可支持512M
3. List (列表)
底層是一個字符串鏈表;可以從頭或尾添加元素
注意:
(1) 添加元素時:
如果key不存在,創建新的鏈表
如果key已存在,添加內容
如果key的所有值全部刪除,則對應的key也會隨之消失
(2) 在鏈表的頭尾操作時效率較高,但是對中間元素的操作效率較低
4. Set (集合)
底層通過HashTable實現;是String類型的無重復值的無序集合
5. Zset (有序集合)
類似Set;每個元素都會關聯一個double類型的分數(score);Redis通過分數自動的為集合中的 成員進行從小到大的排序;成員不可重復,分數可以重復
6. Hash (哈希)
類似Java中的Map<String, Object>;是一個鍵值對集合;適合存儲對象
- 單指令與多指令的選擇
對于set與mset兩個指令,應該使用哪一個由具體的業務場景決定
(1) set指令的執行過程
set指令發送給Redis服務器需要一個網絡時間;Redis服務器執行該指令需要一個處理時間; Redis服務器將結果返回需要一個網絡時間;故需要2個網絡時間 + 1個處理時間
(2) 使用set存儲n個值
n個網絡時間(發送) + n個處理時間(處理) + n個網絡時間(返回)
(3) 使用mset存儲n個值
1個網絡時間(發送) + n個處理時間(處理) + 1個網絡時間(返回)
注:每次攜帶的數據增多,網絡時間會相應的延長
綜上所述,當需要處理的數據較少時,使用單指令;當處理的數據較多時,使用多指令
八、Redis常用查詢指令
九、Jedis的使用
- 首先需要在redis.conf配置文件中修改配置,需要重啟Redis服務方可生效
-
修改之后,必須指定綁定的主機地址方可使用Redis
-
開放6379端口
- 創建Java項目并導入jar包
- src目錄下創建redis.properties配置文件
#最大連接數
redis.maxTotal=50
#默認開啟的活躍連接數
redis.maxIdel=10
#Linux的ip地址
redis.host=192.168.200.130
#redis的端口號
redis.port=6379
- 創建Jedis的工具類JedisUtils
public class JedisUtils {
// 將從配置文件讀取的配置信息賦予如下變量
private static int maxTotal;
private static int maxIdel;
private static String host;
private static int port; // 端口號為int類型
// Jedis的連接池配置
private static JedisPoolConfig jedisPoolConfig;
// Jedis連接池
private static JedisPool jedisPool;
static {
// 讀取redis.properties配置文件
ResourceBundle bundle = ResourceBundle.getBundle("redis");
maxTotal = Integer.parseInt(bundle.getString("redis.maxTotal"));
maxIdel = Integer.parseInt(bundle.getString("redis.maxIdel"));
host = bundle.getString("redis.host");
port = Integer.parseInt(bundle.getString("redis.port"));
// Jedis連接池配置
jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdel);
jedisPool = new JedisPool(jedisPoolConfig, host, port);
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
- 創建測試類JedisTest
public class JedisTest {
public static void main(String[] args) {
// 1. 獲取Jedis對象
Jedis jedis = JedisUtils.getJedis();
// 2. 執行操作,Jedis中操作的方法名與Linux中命令行工具中的指令同名
jedis.sadd("key1", "abc", "abc", "def");
Long key1 = jedis.scard("key1");
System.out.println("運行結果:" + key1);
// 3.關閉連接
jedis.close();
}
}
- Linux中進行測試
十、Redis可視化工具
-
安裝軟件
-
運行軟件
十一、持久化概念
-
意外斷電或重啟之后,內存中的數據將會丟失,故應當將內存中的數據保存在磁盤中
-
概念
利用磁盤等將數據進行保存,在特定的時間將保存的數據進行恢復的工作機制稱為持久化
- 持久化的兩種方式
(1) 快照
將某個時間點的工作狀態保存下來,恢復時可直接恢復指定時間點的工作狀態
Redis中這種方式稱為RDB
(2) 日志
將對數據的所有操作過程記錄下來,恢復數據時重新執行這些操作
Redis中這種方式稱為AOF
十二、RDB
- 對redis.conf配置文件進行修改 (修改配置文件后需要重啟Redis)
(1) 修改內存中數據保存的文件的名稱,默認值為dump.rdb
(2) 修改rdb文件保存的目錄
-
執行save指令即可將內存中的數據保存到/opt/redis-3.0.4/目錄的dump.rdb文件中
-
再次啟動redis服務即可自動讀取rdb文件中的數據并加載到內存
-
save指令工作原理
Redis是單線程的,故執行save指令會阻塞其之后的命令的執行(可能多人操作同一個Redis 服務器),如果要保存的數據較多時,會導致之后的命令長時間阻塞,故一般不使用save指令
-
bgsave指令可以讓保存操作在后臺執行,讓redis服務可以繼續執行其之后的指令,使用較多
-
bgsave指令工作原理
-
配置自動保存 (修改配置文件后需要重啟Redis)
- 自動保存方式的注意點
(1) get操作沒有導致key發生變化
(2) 對存在的key修改才算發生變化
(3) set k1 v1,set k1 v1認為key的值發生變化
(4) 配置方式執行的是bgsave指令
- RDB兩種指令的對比
十三、AOF
- RDB缺點
(1) 基于快照思想,每次讀寫都是全部數據,當數據量較大時,效率非常低
(2) 基于fork創建子進程,內存產生額外的消耗
(3) 宕機帶來數據丟失風險(可能某個時間點的數據未保存)
- AOF概念
以日志的方式記錄每次操作的命令,重啟之后執行AOF中保存的命令恢復數據,較為主流
- 對redis.conf配置文件進行修改 (修改配置文件后需要重啟Redis)
- AOF執行策略
(1) everysec (每秒)
每秒將緩沖區的指令寫入aof文件中,宕機會丟失0-1秒的數據,性能高,建議使用
(2) always (每次)
每次執行指令都將其寫入aof文件中,數據零失誤,性能較低,不建議使用
(3) no (系統控制)
由操作系統控制寫入aof文件的時間,不建議使用
注意:i. 只有使得key變化的指令才記錄
ii. 重啟之后自動從aof文件中讀取指令并執行
iii. select指令雖然沒有對key進行修改,但仍需記錄,以知道數據存儲的位置
十四、AOF重寫
- 概念
AOF文件中已經記錄的對同一數據的若干條操作的記錄轉換為數據最終結果對應指令的記錄
- AOF重寫作用
-
為防止數據量過大導致緩沖區溢出,合并后的每條指令最多寫入64個元素
-
AOF重寫方式
(1) 手動重寫,執行bgrewriteaof指令
(2) 自動重寫,修改配置文件
十五、RDB與AOF的選擇
- 對比
- 選擇策略
總結
以上是生活随笔為你收集整理的Redis入门_redis菜鸟教程(windows)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Trace SAP OData exec
- 下一篇: ios越狱教程14.3_ios14.4.