1. 程式人生 > >Redis實現原理及作用

Redis實現原理及作用

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部 分場合可以對關係資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。[1]  

Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對資料進行寫操作。由於完全實現了釋出/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的訊息釋出記錄。同步對讀取操作的可擴充套件性和資料冗餘很有幫助。

redis的官網地址,非常好記,是redis.io

TYPE key — 用來獲取某key的型別

KEYS pattern — 匹配所有符合模式的key,比如KEYS * 就列出所有的key了,當然,複雜度O(n)

RANDOMKEY - 返回隨機的一個key

RENAME oldkeynewkey— key也可以改名

列表操作,精華

RPUSH key string — 將某個值加入到一個key列表末尾

LPUSH key string — 將某個值加入到一個key列表頭部

LLEN key — 列表長度

LRANGE key start end — 返回列表中某個範圍的值,相當於mysql裡面的

分頁查詢那樣

LTRIM key start end — 只保留列表中某個範圍的值

LINDEX key index — 獲取列表中特定索引號的值,要注意是O(n)複雜度

LSET key index value — 設定列表中某個位置的值

LPOP key

RPOP key — 和上面的LPOP一樣,就是類似棧或佇列的那種取頭取尾指令,可以當成訊息佇列來使用了

集合操作

SADD key member — 增加元素

SREM key member — 刪除元素

SCARD key — 返回集合大小

SISMEMBER key member — 判斷某個值是否在集合中

SINTER key1 key2 ... keyN — 獲取多個集合的交集元素

SMEMBERS key — 列出集合的所有元素

redis

  是一個文件(nosql)資料庫,工作與記憶體,主要用做快取記憶體

使用的步驟  

 1 從redis.io下載

 2 點選redis-server.exe啟動服務

 3 使用redis-cli.exe進行訪問

-------------操作string資料----------------------

 1 增/改

    set x 99

 2 刪

     del x

 3 查

     get x

 -------list資料----------

 1 增

    lpush books aa bb

    rpush books xx

 2 刪

    lrem books 1 xx

 3 查

    lindex books 0

    lrange books 0 -1

 4 長度

     llen books

 --------map資料-------

  1 增/改

    hset person  name aa

    hmset person sex 1 lang java

  2 刪

    hdel person sex

  3 查

    hget person name

    hkeys person

    hvals person

--------jedis---

 con=new Jedis("127.0.0.1",6379);

--------讀寫分離/冷熱分離----

redis和mysql執行不同的功能:

  redis用於讀---查詢

  mysql用於寫---增刪改

使用步驟:

  通過spring實現分離

@Configuration@EnableCaching//開啟快取public class RedisConfig {@Bean//將方法返回的物件交給spring管理public JedisConnectionFactory createFactory(){        JedisConnectionFactory factory=new JedisConnectionFactory();        factory.setHostName("127.0.0.1");        factory.setPort(6379);return factory;    }@Beanpublic RedisTemplate<String,String> createTemplate(JedisConnectionFactory factory){        RedisTemplate<String,String> template=new RedisTemplate<String, String>();        template.setConnectionFactory(factory);return  template;    }//快取管理器@Beanpublic RedisCacheManager createCache(RedisTemplate<String,String> template){return  new RedisCacheManager(template);    }}

Dao中的配置

@CacheEvict(value = {"findallbook"},allEntries = true)//重建快取@Cacheable("findallbook")//吧該方法返回的資料快取到redisList<Book> findallbook();