1. 程式人生 > >Redis的基本知識

Redis的基本知識

內存 json 連接數 插入 ble 客戶端 資料 sha 設置ip

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的基本知識