redis簡介-安裝部署-命令說明
阿新 • • 發佈:2018-11-16
1Redis的使用場景:
- 關係資料庫的快取
- 可以做任務佇列(執行模組1,模組2,模組3,模組4,模組5 ........)
- 大量資料運算(兩個集合求交集)
- 排行旁之類(redis非常擅長大量資料的排行榜)
- GEO地理位置(也是我們常用的附近的人)
2redis安裝部署方式
2.1前端安裝部署redis
Cd /usr/local/redis/src 執行服務端:./redis-server 另外啟動一個客戶端ssh視窗執行 執行客戶端(預設連線本機6379埠):./redis-cli 劣勢:這種部署方式不能進行叢集部署 另外一臺電腦登入redis執行:./redis-cli –h IP地址 –P 埠
2.2後端安裝部署redis
vim redis.conf 修改daemonize no 改成 daemonize yes如下圖所示:
執行:./src/redis-server ./redis.conf
檢視:ps -ef |grep -i redis 可以看到redis的程序是否已經啟動
3redis資料型別【重點內容】
- Redis使用的都是K-V資料型別
- Key:全部是字串型別
- Value:字串(string、hash、list(linkedlist連結串列,新增/刪除效率極高)HSET、有序的set集合,一般的set集合是無序的)
- Key的名字是自定義的,不要太長
4redis命令-string命令
Mysql關係型資料庫,二進位制不安全;編碼和解碼只在客戶端發生,不在客戶端和磁碟編解碼;專案建立是GBK或者UTF8以後都不會發生其他的
而MySQL編解碼過程:
5常用命令
5.1賦值操作
如果賦予專案的KEY,新的value會覆蓋舊的value值
5.2取值
5.3刪除
5.4getset操作
5.5lncr key
計數器的使用:incr和decr只能對數值進行操作(遞增和遞減)
5.6Decr
5.7Incrby
5.8decrby
5.9string使用環境
主要使用者儲存JSON格式的字串
5.10Hash命令
Hash----------{username:“張三”,age:14}
5.11增加數字
6Jedis介紹
- Java的客戶端支援:jedis、redisson、jredis、JDBC-redis
- Redis有什麼命令,jedis就有什麼方法
package cn.itcast.demo1;
import org.junit.Test;
import redis.clients.jedis.Jedis;
Public class Demo1{
/**
*單例項連結redis資料庫
*/
@Test
public viod run1(){
Jedis jedis = new Jedis("192.168.56.11",6379)
jedis.set("name","張三");
System.out.println(jedis.get("name"));
}
}
6.1Jedis連結redis的連線池程式碼
/**
* Jedis連線池
*/
@Test
public void run2(){
//1.設定連線池的配置物件
JedisPoolconfig config = new JedisPoolConfig();
//設定池中最大連結數【根據自己的實際情況和贏家配置情況來定最大連線數量】
config.setMaxTotal(500);//自己設定的最大連線數為500
//設定空閒時池中保有的最大連線數【根據自己的實際情況和贏家配置情況來定最大連線數量】
config.setMaxIdle(10);
//2.設定連線池物件(解決連線到臺伺服器或者伺服器叢集去)
JedisPool pool = new JedisPool(config,"192.168.56.11",6379);
//3.從池中獲取連線物件
Jedis jedis = pool.getResource();
System.out.println(jedis.get("name"));
//4.連線歸還池中(說得很通俗點就是某個應用需要寫資訊連線redis結束後把這個連線關閉,釋放CPU、記憶體,以便其他使用者連線redis叢集)
jedis.close();
}
6.2連線池工具jedisutils
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtils{
//1.定義一個連線池物件
private final static JedisPool POOL;
static{
//初始化操作
//1.設定連線池的配置物件
JedisPoolconfig config = new JedisPoolConfig();
//設定池中最大連結數【根據自己的實際情況和贏家配置情況來定最大連線數量】
config.setMaxTotal(500);//自己設定的最大連線數為500
//設定空閒時池中保有的最大連線數【根據自己的實際情況和贏家配置情況來定最大連線數量】
config.setMaxIdle(10);
//2.設定連線池物件
POOL= new JedisPool(config,"192.168.56.11",6379);
}
/**
*從池中獲取連線
*/
public static Jedis getJedis(){
return POOL.getResource();
}
}
7持久化
7.1RDB持久化
- RDB:redis database(時間段記憶體中的資料寫入到磁碟中,redis會fork一個子程序,這個子程序來進行持久化,會將資料寫到一個臨時檔案,主程序不進行IO進行操作;優點就是:比AOF執行更加高效,恢復比較簡單一次性操作完成;RDB最後一次持久化的資料可能丟失)
- Fork:fork的作用是複製一個與當前程序一樣的程序;新程序的所有資料(變數、環境變數、程式計數器等)數值都和原程序一致,但是一個全新的程序,並作為程序的子程序。
- RDB持久化的策略:
1)1分鐘內修改了1萬次
2)5分鐘內修改了10萬次
3)15分鐘內修改了1次
優點:
- 適合大規模的資料恢復
- 對資料完整性和一致性要求不高
劣勢:
- 2分鐘這個時間段有可能丟失資料
- Fork比較消耗CPU、記憶體等資源
7.2AOF持久化
AOF:append only file 詳細見:https://redisbook.readthedocs.io/en/latest/internal/aof.html
8redis事務處理
What:可以一次執行多個命令,本質是一組命令的集合。一個事務的所有命令都會序列化,按順序地序列化執行執行而不會被其他命令插入,不許加塞。
How:一個佇列中,一次性、順序性、排他性的執行一系列命令列。
1.事務的命令展示:
2.執行命令顯示結果: