一.簡介
1.1 redis簡介
redis是開源免費的高性能key-value數(shù)據(jù)庫,屬于NoSQL數(shù)據(jù)庫。
redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。
redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
redis與其他key-value緩存產(chǎn)品有如下三個特點:
(1)性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
(2)豐富的數(shù)據(jù)類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
(3)原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。
(4)豐富的特性 – Redis還支持 發(fā)布訂閱消息, 通知, key 過期等等特性。
1.2 redis安裝
下載地址(windows版本)
https://github.com/MicrosoftArchive/redis/releases
完整版本下載地址(Linux):
http://download.redis.io/releases/
Redis Desktop Manager(可視化連接工具)
下載地址:https://www.cr173.com/soft/73300.html
1.3 啟動
1.先啟動服務(wù)端
命令:redis-server.exe redis.windows.conf
2.啟動客戶端
命令:redis-cli.exe
二.redis數(shù)據(jù)結(jié)構(gòu),命令
keys * : 查詢所有的鍵
type key : 獲取鍵對應(yīng)的value的類型
del key:刪除指定的key value
2.1 String
string:字符串類型是非常常見的一種類型,Redis中的字符串類型和很多編程語言里的字符串類型差不多,但相對要靈活些。
set key value 設(shè)置key對應(yīng)的值為string類型的value mset key1 value1 [key2 value2...] 一次設(shè)置多個key get key 獲取指定key的value值 mget key1 [key2 ...] 一次獲取多個key的value值 incr key 對key的值做自增操作,返回新的值 decr key 對key的值做自減操作,返回新的值 incrby key integer 對key的value加指定integer decrby key integer 對key的value減指定integer append key value 給指定key的字符串追加value substr key start end 截取key,從start(包含)到end(包含)。注意只是返回截取的value,源value并沒改變
2.2 list
list:列表可以看作是個雙端隊列,可以在列表兩端推入和彈出元素。
lpush key value: 將元素加入列表左表 rpush key value:將元素加入列表右邊 lrange key start end :范圍獲取 lpop key: 刪除列表最左邊的元素,并將元素返回 rpop key: 刪除列表最右邊的元素,并將元素返回
2.3 hash
hash:Redis中的散列可以讓用戶將多個鍵值對存儲到一個Redis鍵中
存儲: hset key field value 獲?。?nbsp;hget key field 獲取所有的field和value: hgetall key 刪除: hdel key field
2.4 set
set : 不允許重復(fù)元素,集合最顯著的特點應(yīng)該就是其中的元素互不相同。
存儲:sadd key value 獲取:smembers key:獲取set集合中所有元素 刪除:srem key value:刪除set集合中的某個元素
2.5 sortedset
sortedset:有序集合類型,不允許重復(fù)元素,且元素有順序
存儲:zadd key score value 獲?。簔range key start end [withscores] 刪除:zrem key value
三.redis持久化
3.1 RDB
在默認情況下,Redis將內(nèi)存數(shù)據(jù)庫快照保存到dump.rdb的二進制文件中。
可以對Redis進行設(shè)置,讓它在“N秒內(nèi)數(shù)據(jù)集至少有N個改動”, 這一條件被滿足時,自動保存一次數(shù)據(jù)集。比如說:讓Redis滿足“60秒內(nèi)至少有1000個鍵被改動”這一個條件時,自動保存一次數(shù)據(jù)集。
3.2 AOF
開啟AOF持久化
appendonly yes
appendfsync always:每次有新命令追加到aof文件時就執(zhí)行一個持久化,非常慢但是安全
appendfsync everysec:每秒執(zhí)行一次持久化,足夠快(和使用rdb持久化差不多)并且在故障時只會丟失1秒鐘的數(shù)據(jù)
appendfsync no:從不持久化,將數(shù)據(jù)交給操作系統(tǒng)來處理。redis處理命令速度加快但是不安全。
四.JavaWeb連接
核心代碼
@ResponseBody @RequestMapping("/list") public Object listUser() { if (null != redisUtil.get("user")) { return redisUtil.get("user"); } List<User> userList = userService.list(); String userStr = JSONObject.toJSONString(userList); redisUtil.set("user", userStr, 10); return userStr; }
可以看到已經(jīng)set了:
10s內(nèi),再次請求時,是從緩存中獲取的數(shù)據(jù):