Redis操作及持久化分析

一、什麼是Redis
說起redis不得不提的就是nosql(非關係型數據庫),數據之間沒有像關係型數據庫那樣存在關聯,不用複雜的sql語句操作,用key-value,列存儲,文檔存儲多種形式;redis就是使用的key-value的形式存儲的,直接把數據存放在內存中,也有自己的持久化存儲機制,最大的優點就是訪問速度炒雞快
二、redis使用及命令

  1. 使用
    環境搭建在linux
    ①解壓文件 tar -xvf redis-2.6.16.tar.gz -C /usr/local
    ②進入redis-2.6.16目錄 使用make命令編譯redis
    ③在redis-2.6.16目錄中 使用make PREFIX=/usr/local/redis install命令安裝 redis到/usr/local/redis中
    ④拷貝redis-2.6.16中的redis.conf到安裝目錄redis中
    ⑤啓動redis 在bin下執行命令redis-server redis.conf
    ⑥如需遠程連接redis,需配置redis端口6379在linux防火牆中開發
    /sbin/iptables -I INPUT -p tcp –dport 6379 -j ACCEPT
    /etc/rc.d/init.d/iptables save
    redis.conf配置文件很重要,在後邊的持久化會有一點的講解
    如果按照上述步驟操作完,那麼恭喜你,現在你可以開始使用redis了
    小demo,使用前先把commons-pool.jar和jedis.jar導入到項目中
JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(50);
        poolConfig.setMinIdle(10);
        poolConfig.setMaxTotal(100);
        JedisPool pool = new JedisPool(poolConfig,"192.168.17.128",6379);

        Jedis jedis = pool.getResource();
        String str = jedis.get("address");
        System.out.println(str);
代碼不用過多解釋,給Jedis連接池傳入配置文件,linux的ip及port即可

2.命令
瞭解命令之前需要先了解一下redis中value的數據類型都有哪些
key - string 普通字符串類型
key - lists list集合底層是鏈表結構,可參考LinkedList
key - sets set集合,無序,唯一
key - sortedset 有序的set集合,唯一
key - hash hash表,鍵值對形式

①String
set key value 把值value存放在key中
get key 根據key值取得value值
getset key value 先去key的值,再設置key的值爲value
incr key 把key對應的值value +1,如果value非數字類型字符串則報錯,如果key不存在,執行完incr key之後變爲1
decr key 與incr相反,爲-1
incrby key increment 爲key的值+increment
decrby key increment 爲key的值-increment

②lists類型,數據結構如下
這裏寫圖片描述

lpush key values 存放多個values到key中,方向爲左邊
lrange key start end 查詢key中從start到end的值,start=0 爲頭部-1爲尾部
lpop key 刪除key中左邊第一個值
llen key 計算key的長度
lpushx key value 先檢查是否有key,如果有則插入左邊頭值value
lrem key count value 從左邊開始刪除count個value值,如果count=0則刪除全部
lset key index value 設置角標爲index的值爲value
linsert key after value1 value2 從左邊,在value1的後邊插入value2
rpoplpush source destination 從source右邊拿出一個值放在destination的左邊
以上全是從左邊操作list,如果想從右邊操作list用r*即可

③sets
sadd key values 爲key添加多個value值
smembers key 查詢全部value
srem key member 刪除某個value
sismember key value 檢查value是否存在
sdiff key1 key2 返回結果爲除了和key2交集之外key1中的值
sinter key1 key2 返回key1和key2的交集
sunion key1 key2 返回結果爲key1和key2的並集
scard key 返回結果爲key中的數量
srandmember key 隨機去一個成員
sdiffstore destination key1 key2 返回key1和key2交集之外key1的值,並存放在destination中

④sortedset:排序是根據每個值的權重
zadd key score value1 score value2 存放值時分配好權重
zscore key memeber 返回成員查詢其權重是多少
zrange key start end withscores 按照權重查詢角標從start到end的值
zcard key 獲得key中數量
zrem key members 移除某個成員
zrevrange key start end withscores 根據權重查詢角標從start到end的值並倒序
zremrangebyrank key start stop根據權重刪除元素,默認從小到大
zincrby key increment member 爲member增加權重increment
zcount key min max 查詢權重爲min到max值的個數
zrank key member 返回某個值其權重所在位置(排名)

⑤hash
數據結構如下

hset key filed value 爲key設置鍵值對爲filed-value
hgetall key 返回key中所有的filed-value
hget key filed 返回key中filed對應的值
hmset key fileds 設置多個filed-value
hmget key fileds 得到key中多個fileds的值
hexists key filed 檢查key中是否存在filed
hlen key 返回key中包含的filed-value的數量
hincrby key filed increment 爲key中的filed對應的值+increment

以上是對於redis中五種數據類型的部分命令,記是記不住,大概瞭解一下都能對這些數據結構分別做什麼操作,以後用到了再查資料
下面還有一些對於keys的常用操作
keys * 查詢所有集合
del key刪除集合
exists key 檢查key是否存在
rename key1 key2 給key1重命名爲key2
expire key second 設置key的過期時間爲second秒
ttl key 檢查key所剩時間,如果未設置那麼返回-1,已超時 -2
type key 查看key的類型

三、訂閱與事務

  • 訂閱
    subscribe cctv 訂閱cctv,等待發布內容
    publish cctv values 發佈內容,訂閱者可以即時接收到
    由於是在內存中操作,實時性很強,可以用來做即時通訊
  • 事務
    multi 開啓事務
    exec 提交
    discard 回滾
    這裏的事務和數據庫的時候不同,這裏可以理解爲批量處理,開啓事務後,然後逐條執行命令,但是這些命令都不會提交直到你執行exec纔會提交,但是就算其中產生錯誤也不會自動回滾,除非手動執行discard,取消之前的操作

四、持久化
儘管redis是在內存中操作數據,效率很高,但是在內存中的數據是很不穩定的,一旦服務器掛掉,那麼所有數據都沒了,所以redis提供兩套數據持久化的方案,分別是RDB和AOF

RDB:默認開啓的 持久化方式

  • 以快照的形式存放數據,每隔一段時間自動備份一份數據,注重結果
  • 優點:適合大數據量
  • 缺點:會丟失一部分數據,運行期間佔用服務器資源較多

    在文章剛開頭提到了,redis.conf文件,默認RDB配置如下
    save 900 1 如果key更改十次以內,那麼900秒備份一次
    save 300 10 如果key改動十次以上,那麼300秒備份一次
    save 60 10000 如果key改動一萬次以上,那麼60秒備份一次
    先不說效率如何,就單單這個時間間隔就有點長,最短也有可能會丟失一分鐘內的數據

    AOF:默認關閉的
    AOF機制是把對於redis的每次操作的命令記錄下來,通常相同數據量,aof文件要比rdb大,在恢復redis文件時執行一遍記錄的所有命令達到數據恢復的作用,注重過程

  • 優點:保存的數據比較完整

  • 缺點:文件大,數據恢復慢

    針對AOF,redis有三種策略,分別是每秒鐘同步,沒修改同步和不同步
    redis.conf配置文件如下
    always everysec no

五、小結

  1. 據說新浪微博目前有搭建有最大的redis集羣,通過分析redis以上功能,也會發現很適合新浪微博的需求,內容的訂閱,熱搜,排名,持久化
  2. 以上算是對redis的整體認識吧,命令不用記,知道大概有什麼功能即可用的時候來查,對於持久化這塊感覺,公司發展達到一定程度纔會是研究的重點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章