nosql概念
NoSQL(not only sql)泛指非關系型的數據庫。 由于傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的網站,例如搜索引擎,微博,電商等等,暴露了很多難以克服的問題,例如,查詢速度慢,擴展性差,不支持高并發等等。 NoSQL數據庫是為了解決高并發、高可擴展、高可用、大數據存儲問題而產生的解決方案。
NoSQL特點,使用場景
數據模型比較簡單
需要靈活性更強的IT系統
對數據庫性能要求較高
不需要高度的數據一致性
2 redis簡介
高性能
可擴展
內存存儲
key/value數據存儲方式
3 redis入門
- string(字符串)
1.png
- hash(哈希)相當于HashMap
2.png
- list(列表)相當于LinkedList
3.png
- set(集合)相當于HashSet
4.png
- zset(有序集合)相當于TreeSet
5.png
- key操作
6.png
持久化簡介
為應對拉閘限電,系統當機等事故,redis使用持久化技術來避免災難性后果。
redis有兩種持久化方法:RDB、AOF
rdb方式
rdb:在指定的時間間隔對數據進行快照存儲
- 數據保存在硬盤上的一個dump.rdb文件中,如果刪除將失去備份
- rdb方式的配置參數在redis.conf中,具體請查看官方文檔
優點:速度快,并且異步執行,不影響正常功能
缺點:間隔期間,若服務器異常,將有數據丟失
aof方式
aof:記錄每次寫操作,當服務器重啟的時候會重新執行這些命令來恢復原始的數據
優點:不會有數據丟失
缺點:若備份指令很多,恢復數據很慢
事務
redis事務的3個指令
- multi開啟事務
- exec提交事務
- watch監視某個鍵是否被修改,若在事務提交前有被其他客戶端所改動,事務將失敗
java操作redis事務
Jedis jedis=new Jedis("127.0.0.1", 6379);
//開啟事務
Transaction tx = jedis.multi();
//執行語句
tx.set("goodname", "褲子");
tx.set("goodprice", "100");
tx.get("goodname");
//提交事務,并且返回結果
List<Object> exec = tx.exec();
System.out.println(exec);
jedis.close();
6 訂閱與發布
7.png
應用場景
1、微博的關注與取消關注
2、向主服務器獲取任務,然后執行任務
3、web聊天程序,例如webQQ
7 redis主從
一臺主服務器,配置一臺或者多臺從服務器
作用:數據備份、故障轉移、讀寫分離
8.png
redis集群
集群:多臺服務器一起工作
作用:提高存儲容量,分布式計算,主從同步,故障轉移
9 整合redis
整合的原則
- redis服務在整個架構中充當緩存
- 先從緩存獲取數據,獲取失敗再從關系型數據庫獲取
- 更新關系型數據庫時,緩存也要更新或者刪除
- redis不能影響正常的SSM工作
步驟
1、編寫redis接口
2、編寫單機版RedisPool和集群版RedisCluster
具體請看RedisPool和RedisCluster工具類
3、在service層調用對應的方法
public List<AppInfo> selectAppInfoList(){
//先查詢緩存
String string = redisPool.hget(Const.APP_INFO_LIST, "appinfolist:"+userId);
if(!StringUtils.isEmpty(string)){
System.out.println("-----------redis 獲取緩存數據----------");
return JsonUtils.readValue(string, new TypeReference<List<AppInfo>>() {});
}
//查詢mysql數據庫
AppInfoExample example=new AppInfoExample();
example.createCriteria().andUserIdEqualTo(userId);
List<AppInfo> list = appInfoMapper.selectByExample(example);
//將數據放入緩存
redisPool.hset(Const.APP_INFO_LIST, "appinfolist:"+userId,JsonUtils.toJSon(list));
System.out.println("-----------redis 存儲緩存數據----------");
return list;
}