NoSql和Redis

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.            它支持的存儲值的類型

  1. String,list,set,sorted set,hash
  2. 支持集羣(支持主從同步)
  3. 支持持久化

d)       使用場景

                     i.            緩存: 對於常常查詢的數據,將其放到Redis裏面,會提升查詢效率,減小數據庫壓力

                   ii.            計數器引用:微信點贊數量

                  iii.            實時攻防系統

                  iv.             

e)       Redis服務器的安裝

                     i.            啓動Redis服務

  1. 手動啓動:在安裝目錄下啓動雙擊雙擊redis-service.exe
  2. Cmd啓動:

                   ii.            Redis客戶端操做Redis

  1. 對value爲字符串(String) 操做

a)       設置單個鍵值:set

b)       設置多個鍵值:mset

  1. 對key的操做

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

  1. 對list集合的操做
    rdis怎麼實現棧(FILO)和隊列(FIFO)???
    list控制同一邊進,同一邊出就是棧
    list控制一邊進一邊出就是隊列
  2. 對Set集合的操做
  3. 對SortedSet(有序集合)的操做
  4. 對hash類型的操做
  5. Redis設置密碼

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.            排序

  1. 數字集合是經過調用desc和asc方法排序
  2. 字符串字母是經過調用alpha方法進行參數排序.
  3. Redis持久化配置

a)       兩種持久化的方式

                     i.            RDB和AOF,能夠經過修改Redis的conf配置文件進行配置

                   ii.            服務器啓動執行載入程序à判斷是否開啓了AOF的持久化,開啓了就載入AOF的文件,未開啓就載入RDB的文件

                  iii.            RDB模式

  1. RDB模式能夠在指定的時間間隔內生成數據集的時間點快照,默認是開啓RDB模式的,
  2. 如何關閉默認開啓的RDB持久化方式:在Redis.conf文件裏面將在指定時間生成數據集的時間快照進行一個註釋,若是中途忽然斷電,沒法持久化到磁盤
    save ""

  # save 900 1   //至少在900秒的時間段內至少有一次改變存儲同步一次

  # save xxx

  # save 60 10000

     iv.            AOF模式

  1. AOF 持久化記錄服務器執行的全部寫操做命令,並在服務器啓動時,經過從新執行這些命令來還原數據集,默認關閉該模式。
  2. 如何開啓AOF

a)       appendonly yes         //yes 開啓,no 關閉

# appendfsync always //每次有新命令寫時就執行一次fsync 同步

#這裏咱們啓用 everysec

appendfsync everysec //每秒 fsync同步 一次

# appendfsync no      //從不fsync(交給操做系統來處理,可能好久才執行一次fsync),它的參數請你們看redis.conf配置文件詳解

     v.            小結:Redis是怎麼保存數據的.

  1. redis爲了考慮效率,保存數據在內容中.而且考慮數據安全性,還作數據持久化,若是知足保存策略,就會把內存的數據保存到數據rdb文件,還來不及保存那部分數據存放到aof更新日誌中。在加載時,把兩個數據作一個並集.
  2. 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 持久化)和從機(主從鏈接)。

相關文章
相關標籤/搜索