天天看點

Redis總結 -- 初始Redis一,初始Redis二,初始Jedis三,Redis資料類型四,通過jedis操作redis

一,初始Redis

什麼是Redis?

簡介

Redis 是完全開源免費的,遵守BSD協定,是一個高性能的key-value資料庫。

特點

  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  • 豐富的資料類型 – Redis支援二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料類型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
  • 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。

Redis安裝

redis的安裝可以參考 菜鳥教程

在Redis安裝完成之後,便可以啟動redis

Redis總結 -- 初始Redis一,初始Redis二,初始Jedis三,Redis資料類型四,通過jedis操作redis

二,初始Jedis

什麼是jedis

jedis是redis官方推薦的一個面向java的用戶端,java程式可以通過jedis操作redis,jedis對redis的很多指令都進行了封裝,友善開發者調用

通過jedis連接配接redis

導包

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.5.0</version>
        </dependency>
           

簡單擷取Jedis連接配接

/**
     * 連接配接Jedis --- 單執行個體連接配接
     * @param ip
     * @param port
     */
    public Jedis connectToJedis(String ip,int port){
        Jedis jedis = new Jedis(ip,port);
        System.out.println("Jedis連接配接成功!");
        return jedis;
    }

           

基于連接配接池擷取Jedis連接配接

基于連接配接池的連接配接是基于commons-pool實作

/**
     * 配置jedis連接配接池
     * @return
     */
    @Bean
    public JedisPoolConfig getJedisPoolConfig(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //連接配接池中最大連接配接數
        jedisPoolConfig.setMaxTotal(10);
        //連接配接池中最大空閑連接配接數
        jedisPoolConfig.setMaxIdle(5);
        return jedisPoolConfig;
    }

    /**
     * 基于連接配接池擷取jedis連接配接
     * @param ip
     * @param port
     * @return
     */
    public Jedis getJedisFromJedisPool(String ip,int port){
        JedisPool jedisPool = new JedisPool(getJedisPoolConfig(),ip,port);
        Jedis jedis = jedisPool.getResource();
        System.out.println("擷取Jedis連接配接");
        return jedis;
    }
           

三,Redis資料類型

String字元串類型

常用指令: set,get,decr,incr,mget 等。

String資料結構是簡單的key-value類型,value其實不僅可以是String,也可以是數字。 正常key-value緩存應用; 正常計數:微網誌數,粉絲數等

hash哈希鍵值對類型

常用指令: hget,hset,hgetall 等。

hash 是一個 string 類型的 field 和 value 的映射表,hash 特别适合用于存儲對象,後續操作的時候,你可以直接僅僅修改這個對象中的某個字段的值。 比如我們可以 hash 資料結構來存儲使用者資訊,商品資訊等等。比如下面我就用 hash 類型存放了我本人的一些資訊:

key=JavaUser293847
value={
  “id”: 1,
  “name”: “SnailClimb”,
  “age”: 22,
  “location”: “Wuhan, Hubei”
}
           

list表類型

常用指令: lpush,rpush,lpop,rpop,lrange等

list 就是連結清單,Redis list 的應用場景非常多,也是Redis最重要的資料結構之一,比如微網誌的關注清單,粉絲清單,消息清單等功能都可以用Redis的 list 結構來實作。

Redis list 的實作為一個雙向連結清單,即可以支援反向查找和周遊,更友善操作,不過帶來了部分額外的記憶體開銷。

另外可以通過 lrange 指令,就是從某個元素開始讀取多少個元素,可以基于 list 實作分頁查詢,這個很棒的一個功能,基于 redis 實作簡單的高性能分頁,可以做類似微網誌那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。

Set集合類型

常用指令: sadd,spop,smembers,sunion 等

set 對外提供的功能與list類似是一個清單的功能,特殊之處在于 set 是可以自動排重的。

當你需要存儲一個清單資料,又不希望出現重複資料時,set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合内的重要接口,這個也是list所不能提供的。可以基于 set 輕易實作交集、并集、差集的操作。

比如:在微網誌應用中,可以将一個使用者所有的關注人存在一個集合中,将其所有粉絲存在一個集合。Redis可以非常友善的實作如共同關注、共同粉絲、共同喜好等功能。這個過程也就是求交集的過程,具體指令如下:

sinterstore key1 key2 key3 将交集存在key1内

ZSet有序集合類型

常用指令: zadd,zrange,zrem,zcard等

和set相比,sorted set增加了一個權重參數score,使得集合中的元素能夠按score進行有序排列。

舉例: 在直播系統中,實時排行資訊包含直播間線上使用者清單,各種禮物排行榜,彈幕消息(可以了解為按消息次元的消息排行榜)等資訊,适合使用 Redis 中的 Sorted Set 結構進行存儲。

四,通過jedis操作redis

jedis封裝了很多redis指令,可以參考我的github,暫時隻是寫了jedis那部分,如果覺得對讀者有幫助,可以點個小星星支援一下哈,我也很榮幸能幫到有緣人

github

繼續閱讀