redis基礎學習筆記
阿新 • • 發佈:2020-11-20
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:不進行持久化
- 操作配置檔案:appendonly no---->appendonly yes
- RDB預設方式,間隔一定的時間,檢測key的變化情況,然後持久化資料
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 */