一、 Redis概念
redis是一款高性能的非關係型數據庫。
redis數據類型
字符串類型: String,哈希類型:hash,列表類型:list,集合類型:set,有序集合類型:sorted set
二、 應用場景:
緩存,聊天室在線好友,任務隊列(秒殺),應用排行榜,分佈式架構中session分離
三、redis解壓即可使用,以及文件說明:
redis.windows.conf:配置文件
redis-cli.exe: redis的客戶端
redis-server.exe:redis的服務端
四、redis的使用方式
redis的數據結構: rdis存儲的是key,value 格式的數據,其中key都是字符串,value有五種數據格式
value的數據結構:
字符串類型: String,
哈希類型:hash,map形式的存儲方式
列表類型:list, linkedlist格式
集合類型:set, hashset格式
有序集合類型:sorted set
4.1、 使用命令操作redis:
字符串類型: value 不能重複
存儲: set key value
獲取: get key
刪除: del key
hash類型:
存儲: hset key(集合名) field value 例如: hset myhash username(key) liuliu(value)
獲取: hset key(集合名) field value 例如: hget myhash username
刪除: hdel key(集合名) field
獲取hash中的所有數據: hgetall
列表類型(list):
可以添加數據到列表的左邊或者右邊。
存儲: lpush key value 從列表的左邊添加,rpush key value 從列表的右邊添加,
獲取: lrange key start end 從列表中 start 到 end 的數據
刪除: lpop key 刪除列表最左邊的一個元素,並將元素返回
刪除: rpop key 刪除列表最右邊的一個元素,並將元素返回
集合類型(set,不允許重複):
存儲: sadd key value
獲取: smember key 獲取set集合中所有元素
刪除:srem key value
有序集合類型(sorted set):
sorted set 會根據 score 的大小進行排序
存儲: zadd key score value 例如 : zadd mysorted(集合名) 26(序號) liuliu
獲取: zrange key start end 從列表中 start 到 end 的數據
刪除:zrem key value
獲取列表中score(序列的值): zrange key start end withscore 例如: zrange mysorted 0 - -1(負一) withscore
4.2、 使用java代碼操作redis:
4.3、 通用命令:
keys * : 查詢redis中的所有鍵
type key: 查詢鍵的類型
del key:刪除指定的key
五、redis的持久化:
可以將redis中的數據持久化保存到硬盤中。
5.1、redis持久化機制:
RDB: 默認方式,在一定的時間間隔檢測key的變化情況,然後持久化數據
AOF: 以日誌的方式記錄每一條數據持久化到文件中。
RDB使用方法:
找到解壓後的redis配置文件 redis.windows.conf,編輯配置文件,找到一下代碼
save 900 1 十五分鐘之後,有一個key改變,就會持久化一次
save 300 10 五分鐘之後,有大於10個key改變,就會持久化一次
save 60 10000 60秒之後,有10000個key改變,就會持久化一次
修改配置後文件,需要在cmd 命令行進入到redis解壓目錄進行啓動redis的服務端和客戶端,
redis-service.exe redis.windows.conf
數據會存儲到redis解壓目錄的一個dump.rdb文件中。
AOF使用方法:
找到解壓後的redis配置文件 redis.windows.conf,編輯配置文件,找到一下代碼
appendonly no 修改爲 appendonly yes 表示開啓AOF,然後找到下面的代碼,選擇持久化方式
# appendfsync always 每一次操作都進行持久化
appendfsync everysec (默認開啓) 每隔一秒進行一次持久化
# appendfsync no 不進行持久化
修改完畢後,操作方式如RDB一致。數據會被持久化到redis解壓文件下的 appendonly.aof文件中
六、Java客戶端 Jedis:
一款java操作redis數據庫的工具。
jedis操作redis的數據類型,jedis中的方法和redis命令一樣。
但有個特別的設置字符串方法,就是指定所存儲的字符串數據過期時間:setex("鍵的名稱","失效時間",''存儲的數據');
七、Jedis的連接池:
7.1 Jedisd自帶的連接池 JedisPoll
使用:JedisPoll jedisPoll = new JedisPoll (可以傳一個連接池配置對象,主機名,端口號)
創建JedisPoll連接池對象,調用getResource()方法獲取Jedis的連接,調用redis存儲數據的方法。
連接池配置對象(JedisPollConfig ):
JedisPollConfig jedisPollConfig = new JedisPollConfig ();
edisPollConfig.setMaxTotal(最大連接數);
edisPollConfig.setMaxIdle(最大的空閒連接);
7.2 連接池的工具類:
創建一個 JedisPollUtil工具類。
工具類中加載JedisPollConfig 的配置文件 Jedis.properties
package cn.itcast.jedis.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
JedisPool工具類
加載配置文件,配置連接池的參數
提供獲取連接的方法
*/
public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//讀取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//創建Properties對象
Properties pro = new Properties();
//關聯文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//獲取數據,設置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 獲取連接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}