大數據系列——Redis學習筆記

1. Redis的簡介

  •    Redis是一個開源(BSD許可),內存存儲的數據結構服務器,可用做數據庫,高速緩存和消息隊列代理
  • 它支持字符串、哈希表、列表、集合、有序集合,位圖,hyperloglogs等數據類型
  • 內置複製、Lua腳本、LRU收回、事務以及不一樣級別磁盤持久化功能,同時經過Redis Sentinel提供高可用,經過Redis Cluster提供自動分區。
  • 簡言之,Redis是一種面向「鍵/值」對數據類型的內存數據庫,能夠知足咱們對海量數據的快速讀寫需求

2. Redis的特色

  • Redis支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載進行使用
  • Redis不單單支持簡單的k-v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲
  • Redis支持數據的備份,即master-slave主從模式的數據備份

3. Redis的優點

  • 性能極高——Redis讀的速度爲11w/s,寫的速度爲8.1w/s
  • 豐富的數據類型 (Strings,Lists,Hashes,Sets即Ordered Sets )
  • 原子性——Redis的全部操做都是原子性的,同時Redis還支持對幾個操做合併後的原子性執行
  • 豐富的特性——Redis還支持publish/subscribe,通知,key過時等特性。

4. 經常使用的NoSql數據庫

  • hbasejava

    • 存儲海量的數據(數十億行,百萬列)
  • redisnode

    • 基於內存的nosql數據庫
    • 通常使用redis作緩存或者隊列
  • mogodbpython

    • 在結構化數據比較簡單的狀況下,可使用mogodb代替mysql,做爲一個高性能的數據庫

5. Redis的安裝

5.1 Redis單機版的安裝

  • 準備源碼安裝包

    ​ redis-3.2.0.tar.gzmysql

  • 解壓

    ​ tar -zxvf redis-3.2.0.tar.gz -C /opt/linux

  • 重命名

    ​ mv redis-3.2.0/ redisc++

  • 安裝gcc編譯器

    ​ yum -y install gccredis

  • 編譯安裝源碼

    ​ make && make installsql

    注意:編譯安裝完成以後會在src目錄下出現redis的相關命令shell

  • 修改redis.conf的配置項數據庫

    bind node1   (默認是127.0.0.1,這是本地迴環地址,只能本地應用程序之間進行通訊)
    daemonize yes(後臺運行)
    logfile   /opt/redis/logs/redis.log(日誌文件,目錄必須存在)
  • 啓動Redis-Server

    src/redis-server redis.conf

  • 啓動redis客戶端

    src/redis-cli -h uplooking05 -p 6379

5.2 Redis集羣的安裝

  • 把前面安裝好的單機版的redis拷貝到uplooking04 uplooking03
  • 修改redis.conf

bind uplookingxxxxx

  • 在從節點(uplooking04 uplooking05) redis.conf 末尾追加

slaveof uplooking03 6379

  • 修改從節點爲只讀不寫(redis官方推薦的)(uplooking04 uplooking05)

slave-read-only yes

  • 修改主節點(uplooking03)

slave-read-only no

ps:注意啓動集羣時儘可能先啓動主節點再啓動從節點

6. Redis中配置的查看

Redis的配置文件位於Redis的安裝目錄之下,文件名爲redis.conf。能夠經過config命令來查看或設置配置項

config get confName: 獲取配置的值

config set confName confVal: 設置配置的值

7. Redis中的數據類型

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sorted set)有序的集合

8. 數據類型之String(字符串)

  • string是redis中最基本的數據類型
  • 一個key對應一個value
  • string類型的value是基於二進制存儲的,因此徹底能夠存儲圖片和影音等二進制數據
  • key的大小最大512mb
  • 存儲數據: set name value
  • 讀取數據: get name
  • 刪除redis中的key說對應的value: del key

9. 數據類型之Hash(哈希)

  • Redis hash 是一個鍵值對集合。Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象 object
  • 存儲一個數據: HSET KEY fieldName value
  • 獲取數據: HGET KEY fieldName
  • 設置多個數據: HMSET info sex nan address gansu
  • 獲取多個數據: HMGET info sex address
  • 刪除hash中的多個個鍵值對: HDEL info admin ...
  • 刪除redis中的key說對應的value: del key

10. 數據類型之List(列表)

Redis列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)

  • 首部添加數據: LPUSHloves java c++ python..
  • 尾部添加元素: RPUSH linux hadoop..
  • 查看數據: lrange loves 0 10000
  • 首部移除元素: LPOP loves
  • 尾部移除元素: RPOP loves

列表最多可存儲 232-1元素 (4294967295, 每一個列表可存儲40多億)。

11. 數據類型之Set(集合)

Redis的Set是string類型的無序集合。

  • 集合中添加元素: SADD key member member ,member ...
  • SMEMBERS loves
  • 集合中的元素是不能重複,若是添加的value已經存在在redis中則返回0,不存在則返回1

12. 數據類型之ZSet(有序集合)

  • Redis zset和set同樣也是string類型元素的集合,且不容許重複的成員。不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序
  • zset的成員是惟一的,但分數(score)卻能夠重複
  • 給zset添加數據: ZADD loves 5 java
  • 獲取固定得分範圍的數據: ZRANGEBYSCORE loves 1 20

13. Redis中的經常使用命令

13.1 鍵值對相關

  • keys * 取出當前全部的key
  • exists name 查看redis是否有name這個key
  • del name 刪除key name
  • expire confirm 100 設置confirm這個key100秒過時
  • ttl confirm 獲取confirm 這個key的有效時長
  • persist confirm 移除confirm這個key的過時時間
  • select 0 (在redis中總共有16個數據庫,默認是0號數據庫)
  • move confirm 1 將當前數據庫中的key移動到其餘的數據庫中
  • randomkey 隨機返回數據庫裏面的一個key
  • rename key2 key3 重命名key2 爲key3
  • type key2 返回key的數據類型

13.2 服務器相關

  • select 0~15 編號的數據庫
  • quit /exit 退出客戶端
  • dbsize 返回當前數據庫中全部key的數量
  • info 返回redis的相關信息
  • ==flushdb 刪除當前選擇數據庫中的全部key==
  • ==flushall 刪除全部數據庫中的數據==

14. Reds中的API操做

  • pom依賴

    <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
  • 經常使用操做

    package com.uplooking.bigdata.redis;
    
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    
    public class RedisTest {
        @Test
        public void testString() {
            //建立Jedis
            Jedis jedis = new Jedis("uplooking03");
            jedis.select(0);
            jedis.set("name", "value");
            System.out.println(jedis.get("name"));
        }
    
    
        @Test
        public void testHash() {
            //建立Jedis
            Jedis jedis = new Jedis("uplooking03");
            jedis.select(0);
            jedis.hset("info", "name", "admin");
            jedis.hset("info", "age", 12 + "");
            System.out.println(jedis.hget("info", "name"));
        }
    
    
        @Test
        public void testList() {
            //建立Jedis
            Jedis jedis = new Jedis("uplooking03");
            jedis.select(0);
            jedis.rpush("loves", "java", "c++", "python");
            jedis.lpop("loves");
            System.out.println(jedis.lrange("loves", 0, 10000));
            System.out.println(jedis.rpop("loves"));
            System.out.println(jedis.lrange("loves", 0, 10000));
        }
    }

15. Redis可視化工具

RedisDesktopManager

相關文章
相關標籤/搜索