1. 程式人生 > 實用技巧 >redis基礎學習筆記

redis基礎學習筆記

redis

1.概念

  • reids高效能非關係型資料庫(NOSQL---->Not Only SQL)
  • 關係型資料庫與非關係型資料庫的對比:
    • 關係型資料庫:
      • 資料之間有耦合/關係
      • 資料儲存在硬碟中---->操作關係型資料庫消耗資源大
      • 優點:支援複雜查詢及多表查詢,事務支援使其安全性高
    • 非關係型資料庫:
      • 資料儲存形式為鍵值對,文件,圖片
      • 資料之間沒有耦合
      • 資料儲存在記憶體中----->對於並不經常發生變化的資料使用快取思想
      • 快取思想:與快取互動而不是與資料庫直接互動
      • 缺點:不提供資料庫對事物的處理

2.下載安裝

3.命令操作

  • redis的資料格式:鍵值對,key都為字串,value有5種不同的資料格式:
    • 字串:String
    • 雜湊型別 hash:map格式---->鍵值對
    • 列表型別 list:linkedlist格式
    • 集合型別 set ---->不允許重複
    • 有序集合型別 sortedset---->自動進行排序
  • 字串形式:
    • 儲存:set key value
    • 獲取:get key
    • 刪除:del key
  • 雜湊型別:
    • 儲存:hset key (field value)
    • 獲取:hget key field---->獲取所有的值:hgetall key
    • 刪除:hdel
  • 列表型別(字串列表可模擬佇列操作):
    • 可選擇從兩端加入資料---->lpush key value / rpush key value
    • 獲取:lrange key start end:範圍獲取
    • 刪除並返回:lpop key / rpop key
  • 集合型別(不允許重複不保證順序):
    • 儲存:sadd key value
    • 獲取集合中所有的元素:smembers key
    • 刪除集合中的某個元素:srem key value
  • 有序集合(不允許有重複元素且有序,每個成員關聯著一個double評分):
    • 儲存:zadd key score value
    • 獲取:zrange key start end
    • 刪除:zrem key value
  • 通用命令:
    • 查詢所有的鍵:keys *
    • 查詢鍵對應的資料型別:type key
    • 刪除指定的鍵值對:del key

4.持久化操作

  • redis是一個記憶體資料庫,當redis伺服器重啟,資料將會丟失,我們可以將redis記憶體中的資料持久化儲存到硬碟的檔案中。
  • redis持久化機制(通過操作配置檔案更改):
    • RDB預設方式,間隔一定的時間,檢測key的變化情況,然後持久化資料
      • save 900 1;save 300 10;save 60 10000---->每隔900秒並且有一條資料發生改變就持久化一次
      • 重啟redis伺服器並指定配置檔案的名稱
      • redis-server.exe redis.windows.conf
    • AOF:日誌記錄的方式,記錄每一條命令的操作,每次命令操作都持久化資料
      • 操作配置檔案:appendonly no---->appendonly yes
        • appendfsync always:每次操作都進行持久化
        • appendfsync evertsec:每秒鐘
        • appendfsync no:不進行持久化

5.使用java客戶端操作redis

  • Jedis:類似於JDBC,java操作redis資料庫的工具

  • 使用:

    public void test01(){
        //獲取連結
        Jedis jedis = new Jedis("localhost", 6379);
        //使用Jedis
        String set = jedis.set("username", "zhangsan");
        System.out.println(set);
        String username = jedis.get("username");
        System.out.println(username);
        //關閉連線
        jedis.close();
    }
    
  • Jedis連線池:JedisPool

    //使用預設配置
    public void test02(){
        //建立連線池
        JedisPool jedisPool = new JedisPool();
        //建立redis連線
        Jedis jedis = jedisPool.getResource();
        //使用
        jedis.zadd("grade",100,"zhangsan");
        //歸還連線
        jedis.close();
    }
    
    public void test03(){
        JedisPoolConfig jedisPoolConfig = new 	JedisPoolConfig();
        //最大連線池物件數
        jedisPoolConfig.setMaxTotal(50);
        //最大保持idle(空閒)狀態物件數
        jedisPoolConfig.setMaxIdle(10);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379);
        Jedis jedis = jedisPool.getResource();
        jedis.zadd("grade",100,"zhangsan");
        jedis.close();
    }
    /*
    #最大活動物件數     
    redis.pool.maxTotal=1000    
    #最大能夠保持idel狀態的物件數      
    redis.pool.maxIdle=100  
    #最小能夠保持idle狀態的物件數   
    redis.pool.minIdle=50    
    #當池內沒有返回物件時,最大等待時間    
    redis.pool.maxWaitMillis=10000    
    #當呼叫borrow Object方法時,是否進行有效性檢查    
    redis.pool.testOnBorrow=true    
    #當呼叫return Object方法時,是否進行有效性檢查    
    redis.pool.testOnReturn=true  
    #“空閒連結”檢測執行緒,檢測的週期,毫秒數。如果為負值,表示不執行“檢測執行緒”。預設為-1.  
    redis.pool.timeBetweenEvictionRunsMillis=30000  
    #向呼叫者輸出“連結”物件時,是否檢測它的空閒超時;  
    redis.pool.testWhileIdle=true  
    # 對於“空閒連結”檢測執行緒而言,每次檢測的連結資源的個數。預設為3.  
    redis.pool.numTestsPerEvictionRun=50  
    #redis伺服器的IP    
    redis.ip=xxxxxx  
    #redis伺服器的Port    
    redis1.port=6379   
    */