一饼灿、關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫的區(qū)別
- 關(guān)系型數(shù)據(jù)庫:MySQL、Oracle奕剃、SQLserver....
- 數(shù)據(jù)之間有關(guān)聯(lián)
- 存儲在硬盤上
- 非關(guān)系型數(shù)據(jù)庫:Redis...
- 數(shù)據(jù)之間無關(guān)聯(lián)
- 存儲在內(nèi)存上(緩存中)
二、Redis
Redis是鍵值(Key-Value)存儲的數(shù)據(jù)庫。
Key是字符串類型的祈搜。
Value有五種類型:
- string、字符串類型士八。
- hash容燕、哈希類型、相當(dāng)于Map類型婚度,value里面存儲鍵值對蘸秘。
- list、列表類型蝗茁,有序醋虏,可以有重復(fù)元素。
- set哮翘、集合類型颈嚼,無序,不能有重復(fù)元素饭寺。
- sortedset阻课、可以排序的集合類型,有序艰匙,不能有重復(fù)元素限煞。
①、Redis相關(guān)的文件:
- redis.windows.conf:配置文件
- redis-cli.exe:redis的客戶端
- redis-server.exe:redis服務(wù)器端
②员凝、Redis操作(命令行操作):value的5種數(shù)據(jù)類型有不同的操作署驻。
- 1、string
- 增加:set key value
- 獲冉∨:get key
- 刪除:del key
- 2旺上、hash
- 增加:hset key field value (field相當(dāng)于value中的map的key)
- 獲取:hget key field
- 刪除:del key field
- 3骤公、list
- 增加:
- lpush key value抚官、將元素從左邊做入棧操作
- rpush key value、將元素從右邊做入棧操作
- 獲取所有:
- lrange key start end :范圍獲取
- lrange key 0 -1 是獲取全部
- 獲取&刪除:
- lpop key阶捆、將元素從左邊做出棧操作凌节、并返回出棧元素钦听。
- rpop key、將元素從右邊做出棧操作倍奢、并返回出棧元素朴上。
- 增加:
- 4、set
- 增加:sadd key value
- 獲取所有:smembers key
- 刪除:srem key value卒煞、刪除set集合中某個元素痪宰。
- 5、sortedset畔裕、根據(jù)score 的大小來從小到大排序衣撬。
- 增加:zadd key score value
- 范圍獲取:zrange key start end
- 刪除:zrem key value
- 6扮饶、通用的命令
- keys *:查看所有的key
- type key:查看key對應(yīng)的value的類型
- del key:刪除鍵值對具练。
③、Redis的持久化存儲:
因為Redis是存儲在內(nèi)存中的甜无,所以斷電扛点、關(guān)閉Redis數(shù)據(jù)庫,Redis中的數(shù)據(jù)就會消失岂丘。我們可以讓Redis的數(shù)據(jù)持久化的存儲
Redis的兩種持久化機制:
- RDB::默認方式陵究,不需要進行配置,默認就使用這種機制
1. 編輯redis.windwos.conf文件
# after 900 sec (15 min) if at least 1 key changed
save 900 1
# after 300 sec (5 min) if at least 10 keys changed
save 300 10
# after 60 sec if at least 10000 keys changed
save 60 10000
2.重啟Redis數(shù)據(jù)庫奥帘,并且指定配置文件名稱铜邮。
D:\.....> redis-server.exe redis.windows.conf
- AOF:日志記錄的方式,可以記錄每一條命令的操作翩概∩啵可以每一次命令操作后返咱,持久化數(shù)據(jù)
編輯redis.windwos.conf文件
appendonly no(關(guān)閉aof) --> appendonly yes (開啟aof)
# appendfsync always : 每一次操作都進行持久化
appendfsync everysec : 每隔一秒進行一次持久化
# appendfsync no : 不進行持久化
三钥庇、Java操作Redis:Jedis
1.首先導(dǎo)入Jar包
2.Java操作Redis的三步:
//1. 獲取連接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
//3. 關(guān)閉連接
jedis.close()
3.Jedis連接池:
為了不反復(fù)獲取連接釋放連接耗費系統(tǒng)資源评姨,我們使用池技術(shù),創(chuàng)建一個Jedis連接池萤晴,連接直接從池中獲取吐句,用完歸還到池中。
//0.創(chuàng)建一個配置對象
JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(50);
config.setMaxIdle(10);
//1.創(chuàng)建Jedis連接池對象
JedisPool jedisPool = new JedisPool(config,"localhost",6379); //2.獲取連接
Jedis jedis = jedisPool.getResource();
//3. 使用
jedis.set("hehe","heihei");
//4. 關(guān)閉 歸還到連接池中
jedis.close();
為了更簡便店读,我們把Jedis的一些步驟抽取為一個工具類——JedisUtils
public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//讀取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//創(chuàng)建Properties對象
Properties pro = new Properties();
//關(guān)聯(lián)文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//獲取數(shù)據(jù)嗦枢,設(shè)置到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();
}
}