Redis的基本知識
Redis:
1. 概念:開源的高性能鍵值對數據庫,
提供多種鍵值對數據類型:字符串、(離散)哈希、列表、集合、有序集合類型
內部儲存與持久化:內存的讀寫速度遠高於磁盤;自身提供持久化機制(RDB、AOF)
Redis的字符串類型
字符串類型是Redis中最基本的數據類型,可以儲存任何形式的字符串:二進制數據,JSON化的對象、字節數組等。一個字符串類型的最大存儲空間為512M
2. 對數據的操作命令:
SET key1 value1
GET key1
EXPIRE key1 10 設置key1的生命周期為10秒
TTL key1 查看key1的剩余生命周期,返回:-1代表永久,-2代表已經失效
PEXPIRE key1 10000 設置key1的生命周期為10000毫秒
MSET key1 val1 key2 val2 設置多個鍵值對
MGET key1 key2 獲取多個鍵所對應的值
APPEND key1 234 向key1的末尾追加234,如不存在這個鍵則相當於設置這個鍵值,返回結果是追加後字符串的總長度
STRLEN key1 獲得key1的值的字符串的總長度,不存在返回0
存儲的是整數時:
INCR key1 在原來的值上遞增1
INCRBY key1 5 在原來的值上遞增5
3. Redis客戶端的使用:Jedis
方法1:
Jedis jedis = new Jedis(“127.0.0.1”,6379 ); 新建,設置IP、端口
//Jedis.auth(“123”); 配置訪問密碼(如有密碼需要這句代碼,另外只有全局密碼,無針對各數據庫的)
Jedis.set(“key1”,”val1”); 設置鍵值對
String value = jedis.get(“key1”); 根據鍵獲取值
Jedis.close(); 關閉連接
方法2:連接池
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); 新建連接池配置對象
jedisPoolConfig.setMaxTotal(50); 設置最大連接數
JedisPool jedisPool = new JedisPool(jedisPoolConfig,”127.0.0.1”,6379); 新建連接池對象
Jedis jedis = jedisPool.getResource(); 從連接池中獲取連接
//Jedis.auth(“123”); 如有密碼需要配置
String value = jedis.get(“key1”);
JedisPool.returnResource(jedis); 調用連接池回收連接
jedisPool.close(); 釋放連接池
方法3:集群式連接池:
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); 新建連接池配置對象
jedisPoolConfig.setMaxTotal(50); 設置最大連接數
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>; 定義集群信息
shards.add(new JedisShardInfo(“127.0.0.1”,6379));
shards.add(new JedisShardInfo(“127.0.0.1”,6380));
定義集群連接池
ShardedJedisPool shardedJedisPool = new SaradedJedisPool(jedisPoolConfig,shards);
ShardedJedis shardedJedis = null;
try{
shardedJedis = shardedJedisPool.getResource(); 從連接池獲取jedis分片對象
}
相關操作………..
catch(Exception e){
e.printStakTrace();
} finally{
If(null != shardedJedis){
shardedJedis.close() 將jedis分片放回池中
}
}
sharedeJedisPool.close();
4. 多節點Redis(無集群的實現)
缺點:該方法在添加新的Redis節點時會出現問題,因為它會重新計算分配hash值,有可能會獲取不到原來的值。
5. Hash結構
5.1. 結構說明
註意:Hash中存儲的字段和值只能是字符串。
5.2. 基本命令使用
HSET key1 field1 val1
HGET key1 field1
HMSET key1 field1 val1 field2 val2
HMGET key1 field1 field2
HGETALL key
註意:HSET不會區分插入和更新操作,如操作是插入則返回1,更新返回0
5.3. Jedis中操作Hash結構
5.4. 判斷字段是否存在
5.5. 增長和刪除
5.6. 只獲取字段名或字段值
5.7. 獲取字段數量
5.8. Redis配置文件
達到內存限制後的處理策略:
5.9. 相關的推薦
Redis內存使用優化與存儲
http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage
Redis復制與可擴展集群搭建
http://www.infoq.com/cn/articles/tq-redis-copy-build-scalable-cluster
Redis 設計與實現
https://redisbook.readthedocs.org/en/latest/
SpringSource發布Spring Data Redis 1.0.0
http://www.infoq.com/cn/news/2012/01/spring-data-redis-1-0-0
Redis內存存儲結構分析
http://www.searchtb.com/2011/05/redis-storage.html
6. Redis的持久化
6.1. RDB方式
6.1.1. 如何禁用RDB持久化
禁用RDB的觸發條件即可。
6.1.2. RDB持久化過程
6.2. AOF方式
6.2.1. 原理
開啟AOF:
6.2.2. AOF文件內容
註意:查詢數據的操作不做記錄。
6.2.3. AOF文件的優化
優化後:
6.2.4. 文件到磁盤的機制
參考資料:《傳智播客》
Redis的基本知識