Redis
Remote Dictionary Service即遠程字典服務
一個基于內存的key-value結構數據庫,在開發中常常作為緩存存儲不經常被改變的數據
基于內存存儲,讀寫性能高
在企業中應用廣泛
Redis介紹
用C語言開發的開源高性能鍵值對數據庫,可以達到10w+的qps,可以存儲豐富的value類型,被稱為結構化的nosql數據庫
Nosql:(Not Only Sql),泛指非關系型數據庫(數據和數據之間沒有聯系)
是關系型數據庫的補充
關系型數據庫(RDBMS)
Mysql
Oracle
DB2
SQLServer
非關系型數據庫(NoSql)
Redis
Mongo db
MemCached
Redis的作用
數據緩存:將數據緩存到redis中
消息隊列
…
Redis的啟動
前端模式啟動(不使用)
直接運行bin/redis-server,缺點是啟動完成后不能再進行任何操作除非使用ctrl+c退出
后端模式(推薦)
先修改redis.conf配置文件,修改daemonize 為yes
daemonize:后臺運行
在啟動時指定配置文件運行
./redis-server redis.conf
redis啟動客戶端
./redis-cli
Redis的終止
在redis客戶端中輸入
shutdown
Windows中Redis的啟動和終止(僅了解)
直接打開redis-server.exe啟動redis服務
默認端口號為6379
ctrl+c停止服務
打開redis-cli.exe啟動redis客戶端,默認連接本地Redis服務,且不需要認證即可連接成功
使用可視化工具連接redis服務器端
redis-desktop-manager
安裝過程略,端口號默認6379
如果需要允許其他機器進行訪問需要配置redis.conf進行內容配置
添加當前linux局域網的ip地址
切換redis數據庫
select 數據庫索引
注:一個redis服務器中可以包含多個數據庫,客戶端可以只連接Redis中的某個數據庫
Redis中有db0-db15的16個數據庫,不能被刪除也不能新建,數據庫中沒有表結構,客戶端默認連接第0個數據庫
Redis的數據類型
redis的value支持五種數據類型
key必須為String類型,用以表示存儲的數據
命名規則:
不能太長避免查詢效率低
不能太短避免重復
value支持五種數據類型,表示存儲的數據
string:字符串
hash:鍵值對
list:列表類型,存取有序,可以重復
set:集合類型,存取無需,不可重復
sorted set/zset :有序集合類型,每個元素有一個分數用以決定順序
string類型
Redis中最基礎的數據類型
字符串,整數,浮點類型都以字符串寫入
最多容納512m
常用命令
set 鍵 值
//添加或修改一個鍵值對
get 鍵
//根據鍵獲取值,不存在返回nil(c語言中的null)
del 鍵
//刪除指定鍵值對,返回刪除個數
SETEX key seconds value
//設置指定key的值,將key的過期時間設為seconds秒,
//即SET key value ex seconds
EXPIRE key seconds
//如果一個key存在,設置過期時間
SETNX key value/set key value nx
//保存鍵值對,如果key存在則不保存mset name lisi addr sh
批量添加name為lisi addr為sh
mget name age addr
批量獲取name,age,addr的值
del name age
批量刪除name age
hash類型操作命令
Redis中的hash類型可以看成鍵值均為String類型的Map容器
每個Hash中可以保存2^32-1個鍵值對
常用命令
hset 鍵 字段 值
//添加鍵,字段,值
hget 鍵 字段
//通過鍵,字段得到值
hmset 鍵 字段 值 字段 值
//multiply多個,一次添加多個字段和值
hmget 鍵 字段 字段
//通過鍵,獲取多個字段和值
hdel 鍵 字段 字段
//刪除一個或多個字段的值
hgetall 鍵
//得到這個鍵下所有的字段和值
HKEYS 鍵
//獲取哈希表中所有字段
HVALS 鍵
//獲取哈希表中所有值
list類型
在Redis中list類型時按照插入順序排序的字符串鏈表,可以在左側和右側添加新元素
如果該鍵不存在就會創建這個鍵對應的鏈表
如果鍵對應的鏈表沒有元素就會將鍵也移除
list可以包含的元素為2^32-1個
常用命令
lpush 鍵 元素 元素
//從左邊向指定的鍵中添加一個或多個元素,返回元素個數
rpush 鍵 元素 元素
//從右邊向指定的鍵中添加一個或多個元素,返回元素個數
l/rpop 鍵
//從左/右側刪除一個元素,返回被刪除的元素
lrange 鍵 開始 結束
//得到鍵中指定范圍的元素的數據
從左到右的索引為0-n
從右到左的索引為-1-(-(n+1))
所以從左到最后一個即為0--1
lindex 鍵 索引值
//查詢指定索引的元素
llen 鍵
//獲取列表的長度
BRPOP key1 [key2] timeout
//移出并獲取列表的最后一個元素,如果列表沒有元素就會阻塞隊列直到有元素或超時
LREM key 刪除元素個數 value值
//從表頭刪除指定個數的元素
Set類型
沒有排序的字符集合,不可重復
可包含的最大元素數量為2^32-1個
常用命令
sadd 鍵 元素 元素
//向一個鍵中添加一個或多個元素
smemers 鍵
//得到這個集合中所有的元素
sismember 鍵 元素
//判斷指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 鍵 元素 元素
//通過鍵刪除一個或者多個元素
sinter key1 [key2]
//返回給定所有集合的交集(集合中共有的部分)
Zset/sorted set類型
sorted set有序集合
和set集合類似,但每個元素會關聯一個分數作為排序因子
通過分數進行從小到大的排序
集合成員唯一但分數可以重復
常用命令
zadd 鍵 分數 值 分數 值
//添加一個或多個元素,每個元素都有一個分數
zincrby key increment member
//對指定元素的分數進行增減操作
zrange 鍵 開始索引 結束索引
//獲取指定范圍的元素,得到所有元素,索引為0到-1
zrange 鍵 開始索引 結束索引 withscores
//查詢指定元素和對應的分數
zrevrange 鍵 開始索引 結束索引 withscores
//按照分數倒序獲取指定的元素和對應的分數
zrem 鍵 值 值
//刪除一個或者多個值
zcard 鍵
//得到元素個數
zrank 鍵 值
//得到元素的索引號
zscore 鍵 值
//得到元素的分數
Redis通用命令
keys 匹配字符
//查詢所有的鍵,可以使用通配符
//*匹配多個字符
//?匹配一個字符
del 鍵1 鍵2
//刪除任何的值類型且可以同時刪除多個鍵
exists鍵
//判斷鍵是否存在,不存在返回0,存在返回1
type鍵
//判斷指定鍵的值類型,返回類型名字
select數據庫編號
//選擇其他數據庫
move鍵數據庫編號
//將當前數據庫中指定的鍵移動到另一個數據庫中
TTL key
//返回給定key的剩余生存時間(TTL,time to live),以秒為單位
從Redis2.8開始
key不存在或已過期:-2
key存在或者沒有設置過期時間:-1
flushall
//清空redis所有庫(不推薦)
Java中操作Redis
Redis的java客戶端
jedis
lettuce
redisson
Jedis
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version>
</dependency>
Jedis類的常用方法
方法名即為redis中的命令名
方法參數即為命令參數
每次訪問Redis數據庫時都需要創建一個jedis對象
Spring Data Redis
Spring的一部分,在Spring應用中通過簡單的配置即可訪問Redis服務,高度封裝了Redis底層開發包
@Autowired
private RedisTemplate<String,String> redisTemplate;
//注入redisTemplate@Autowired
private StringRedisTemplate stringRedisTemplate
//redisTemplate的子類,避免寫泛型ValueOperations<String,String> vop = redisTemplate.opsForValue();
//根據redisTemplate獲取操作String類型數據的對象
可以使用stringRedisTemplate
Redis持久化機制
服務端關閉會使數據部分丟失
因為redis服務器默認每隔一段時間才會寫入一次內存數據到硬盤上
redis的持久化
因為redis的數據在ram上存儲,所以斷電就會丟失
所以需要保存到硬盤上做持久化操作
支持兩種持久化方式:
RDB(快照)方式(默認)
將數據以快照方式寫入二進制文件
默認文件名為dump.rdb
可以通過配置進行自動快照持久化
需要設置兩個條件
時間和修改鍵數,當兩個條件都滿足時就會觸發快照
優點:
持久化效率高
數據庫宕機后數據恢復效率更高
缺點:
仍然可能出現數據丟失,如果在持久化之前出現宕機,就會丟失數據
AOF的存儲方式
將每一個收到的寫命令通過write函數追加到文件中
重啟時會全部執行來進行重建
有三種同步策略
每秒同步
每次同步
不同步
優點:
AOF包含一個格式清晰,易于理解的日志文件用于記錄所有修改操作,數據安全性更高,所有操作異步完成
缺點:
運行效率慢
文件更大