1.NoSQLredis
a) 指一些非關係型的數據庫.讀寫性能高,存儲會有過時,數據存放於內存中spring
b) 分類sql
i. 鍵值數據庫數據庫
ii. 列存儲數據庫數組
iii. 文檔型數據庫
redis和memcached是key-value的Nosql,主要用來作緩存的緩存
2.Redis安全
a) 高性能的開源的菲關係型數據庫,數據保存在內存裏面或者磁盤裏面服務器
b) Redis 是以key-value形式存儲,和傳統的關係型數據庫不同。不必定遵循傳統數據庫的一些基本要求,好比說,不遵循sql標準,事務,表結構等等,redis嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。數據結構:數組,list,set,map等redis提供了一下操做方法,咱們使用這些方法就能夠對存入字符串,組織成各類類型數據庫結構(string,list,set,map等).微信
c) Redis數據庫的優點數據結構
i. 數據存儲:存放在內存,還支持持久化.-存取速度快,併發能力強,數據安全性高
還支持集羣(主從同步) (支持高併發,海量數據), 數據能夠主服務器向任意數量從的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器。
ii. 它支持的存儲值的類型
d) 使用場景
i. 緩存: 對於常常查詢的數據,將其放到Redis裏面,會提升查詢效率,減小數據庫壓力
ii. 計數器引用:微信點贊數量
iii. 實時攻防系統
iv.
e) Redis服務器的安裝
i. 啓動Redis服務
ii. Redis客戶端操做Redis
a) 設置單個鍵值:set
b) 設置多個鍵值:mset
a) Keys:獲取全部的key列表
b) Del key:刪除key值
c) expire key xx //設置key的過時時間(xx秒後過時)
d) ttl key:查看key 的過時時間
e) flushall:清除Redis數據庫的全部數據
f) flushdb :清除當前庫的數據,Redis默認是16個數據庫0,1….15
a) 經過命令設置密碼
CONFIG SET 命令能夠動態地調整 Redis 服務器的配置而無須重啓,重啓後失效
CONFIG SET requirepass 123456 //將密碼設置爲123456
CONFIG SET requirepass "" //清除密碼
AUTH 123456 //輸入密碼進行認證
b) 修改Redis的配置文件設置密碼
在配置文件redis.widows.conf中增長一行代碼
requirepass 123456
將密碼123456設置到配置文件中,redis啓動時加載該文件,便可啓用密碼
3.Java操做Redis服務器使用Jedis客戶端
a) Jedis簡單操做
導入jedis的包
@Test
public void test()throws Exception{
//建立鏈接Redis服務器
String host ="127.0.0.1";
int port = 6379;
int timeout = 1000;//超時時間,1秒超時
Jedis jedis = new Jedis(host,port,timeout);
//密碼認證
jedis.auth("admin");
//執行操做,設置key和value值.
jedis.set("yhptest","yhptest dbl!");
System.out.println(jedis.get("yhptest"));
//關閉鏈接
jedis.close();
}
b) 鏈接池配置
i. 經過jedis鏈接池,簡單操做Redis數據庫
/思想:若是建立一個對象後須要爲他設置不少值,還不如先建立它配置對象並作完配置,而後再經過配置對象建立它
//1 建立jedispool配置對象
//2 作配置-四個
//3 建立jedispool
//4 經過jedispool獲取鏈接
//5 執行操做
// 6 釋放鏈接
// 7 摧毀鏈接池-若是是真正項目中它應該是一個受spring管理的單例
@Test
public void test()throws Exception{
//1 建立jedispool配置對象
JedisPoolConfig config = new JedisPoolConfig();
//2 作配置-四個
config.setMaxIdle(2);
config.setMaxTotal(10);
config.setMaxWaitMillis(1*1000); //建立鏈接超時
config.setTestOnBorrow(true);//獲取鏈接是測試鏈接是否暢通
//3 建立jedispool
//1*1000 獲取鏈接超時時間
JedisPool pool = new JedisPool(config,
"127.0.0.1",6379,1*1000,"admin");
//4 經過jedispool獲取鏈接
Jedis jedis = pool.getResource();
//5 執行操做
jedis.set("jedispooltest","dbldblddzt.....");
System.out.println(jedis.get("jedispooltest"));
// 6 釋放鏈接
jedis.close(); //底層作了兼容,若是是鏈接池操做就是釋放,若是是鏈接操做就是關閉
// 7 摧毀鏈接池-若是是真正項目中它應該是一個受spring管理的單例
pool.destroy();
}
總結:先建立Jedis鏈接池配置對象,而後建立鏈接池,建立鏈接池的時候傳入鏈接池配置對象,redis存放的ip地址,Redis端口號,設置鏈接超時時間和操做Redis的用戶,鏈接池獲取到jedis對象,jedis對象操做服務器.關閉鏈接池和jedis對象
c) Jedis數據結構的操做
i. Key值操做
ii. String操做
iii. List操做
iv. Set操做
v. Hash操做
vi. 事務處理
vii. 排序
a) 兩種持久化的方式
i. RDB和AOF,能夠經過修改Redis的conf配置文件進行配置
ii. 服務器啓動執行載入程序à判斷是否開啓了AOF的持久化,開啓了就載入AOF的文件,未開啓就載入RDB的文件
iii. RDB模式
# save 900 1 //至少在900秒的時間段內至少有一次改變存儲同步一次
# save xxx
# save 60 10000
iv. AOF模式
a) appendonly yes //yes 開啓,no 關閉
# appendfsync always //每次有新命令寫時就執行一次fsync 同步
#這裏咱們啓用 everysec
appendfsync everysec //每秒 fsync同步 一次
# appendfsync no //從不fsync(交給操做系統來處理,可能好久才執行一次fsync),它的參數請你們看redis.conf配置文件詳解
v. 小結:Redis是怎麼保存數據的.
volatile-lru:從已設置過時時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過時時間的數據集(server.db[i].expires)中挑選將要過時的數據淘汰
volatile-random:從已設置過時時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據
redis 肯定驅逐某個鍵值對後,會刪除這個數據並,並將這個數據變動消息發佈到本地(AOF 持久化)和從機(主從鏈接)。