Jedis/JedisPool和Redis數據類型與特性

小說:小花園適合種植的草本花有哪些?作者:平平杜更新時間:2019-05-18字數:90547

此時此刻她已經對木葉出現了徹骨的恨意,現在的木葉已經不再是當年她兩個爺爺在世時候的木葉了,已經變質了。

供應扶芳藤的商家都集中在哪里?

不但如此,雅典娜等女也早就準備好,在雷霆大手降臨之前將自己的力量集中在星圖上任由紅衣調動。
李基不敢大意,手持火銃嚴陣以待,再看林風,已經坐在地上,身體靠在院墻上,天亮之前,那一定是廝殺最猛烈的時刻,只有養足精神,才能盡情的殺戮。

這個年輕人大約二十五六歲左右,竟然擁有著S級的異能,看他一臉囂張的樣子,實在是讓人有著想要痛扁他一頓的樣子。

Jedis/JedisPool和Redis數據類型與特性


Fork me on GitHub

1.介紹Jedis

Jedis 是 Redis 的 java 版本客戶端,使用Jedis可以連接 Redis的數據庫,Jedis連接方式有三種Jedis/JedisPool 連接、ShardedJedis/ShardedJedisPool 連接、JedisCluster 連接,今天主要講解用 Java 代碼連接 Jedis 連接池

1.1連接Jedis/JedisPool?

?首先在Redis 中加入username 如圖

下面是連接Jedis的具體過程

public class JedisTest {
    //通過java程序訪問redis數據庫
    
    @Test
    //獲得單一的jedis對象操作數據庫
    public void test1() {
        //1.獲得連接對象
        Jedis jedis = new Jedis("192.168.199.2", 6379);        //2.獲取數據
        String username = jedis.get("username");
        System.out.println(username);
        //3.存儲
        jedis.set("addr", "北京");
        System.out.println(jedis.get("addr"));
    }
  //結果zhr
     北京
//通過jedis的pool獲得jedis連接對象 @Test public void test2() { //0.創建池子的配置對象 JedisPoolConfig poolconfig = new JedisPoolConfig(); poolconfig.setMaxIdle(30);//最大閑置個數 poolconfig.setMinIdle(10);//最小閑置個數 poolconfig.setMaxTotal(50);//最大連接數 //1.創建一個redis的連接池 JedisPool pool = new JedisPool(poolconfig,"192.168.199.2", 6379); //2.從池子中獲取redis的連接資源 Jedis jedis = pool.getResource(); //3.操作數據庫 jedis.set("haha","123"); System.out.println(jedis.get("haha")); //4.關閉資源 jedis.close(); pool.close(); } }
//123

?

1.2封裝JedisPool工具

新建一個 redis.properties

redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=100
redis.url=192.168.199.2
redis.port=6379

創建一個 JedisPoolUtils 工具方便以后開發使用

package com.zhr.jedis;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtils {
    
    private static JedisPool pool;
    
    static {
        //加載配置文件
        InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
        Properties pro = new Properties();
        try {
            pro.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //獲得池子對象
        JedisPoolConfig poolconfig = new JedisPoolConfig();
        poolconfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大閑置個數
        poolconfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小閑置個數
        poolconfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大連接數
        pool = new JedisPool(poolconfig,pro.getProperty("redis.url"), Integer.parseInt(pro.get("redis.port").toString()));

    }
    
    //獲得jedis資源的方法
    public static Jedis getJedis() {
        return pool.getResource();
    }
    
    public static void main(String[] args) {
        Jedis jedis = getJedis();
        System.out.println(jedis.get("haha"));
    }
    
}

如果出現 JedisConnectionException 這個異常的小朋友問題在于沒有把防火墻打開

  • 值得注意的問題是要使用Jedis需要開放端口 Centos7 開放的代碼是

    firewall-cmd --zone=public --add-port=6379/tcp --permanent

  • Centos7以下開放的代碼是

    /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

    /etc/rc.d/init.d/iptables save

?

2.Redis 數據結構及常用命令

? Redis一共有五種數據類型如下

  • 字符型(String)
  • 哈希(hash)
  • 字符串列表(list)
  • 字符串集合(set)
  • 有序字符串集合(sorted set)

? ?Redis 還是一種高級的 key-valu e的存儲系統,所以對于key不要定義太長,不要超過1024字節,這樣消耗內存而且還降低查詢效率

2.1字符型String

?  字符型類型在 Redis 中采用二進制,這說明該類型存入和獲取的數據相同。在 Redis 中字符串類型的 Value 最多可以容納數據長度是512M

  • 賦值: set key value

  • 取值:get key/getset key value
  • 刪除:del key
  • 數值自增和自減: incr key/decr key
  • 為key增加一個指定數值: incrby key increment
  • 為key減少一個指定數值: decrby key decrement
  • 拼湊字符串: append key value

具體操作如圖

  這里我們需要注意的是getset key value這個命令和get key 這兩個命令的區別,前者是先獲取然后在重新設置返回的結果是獲取的結果也就是圖片出現的“lihai”實際已經賦值為5,incr、decr一個是自增、一個是自減、append key value 這個命令是在后面追加字符串返回的是字符串的結果,最后我們刪除del key因為已經沒有了再次get的時候就會nil為空?

2.2哈希hash

?Redis 中 Hash 類型可以看作是 map 的容器,所以該類型非常適合存儲對象的信息。

  • 賦值: hset key field value 為指定的key設置field/value對
  • 賦值: hmset key field value [field2 value2...] 設置key中多個filed/value
  • 取值: hget key field
  • 取值: hmget key fileds ?獲取 key 中的多個filed 的值
  • 取值: hgetall key 獲取 key 中所有的 filed-value
  • 刪除: hdel key field[field...] 可以刪除一個或多個字段,返回值是被刪除的字段個數
  • 刪除 del key 刪除整個list
  • 增加數字: hincrby key field increment 設置key 中 filed 的值增加 increment
  • 是否存在: hexists key field 判斷指定 key 中的 filed 是否存在
  • field的數量: hlen key 獲取 key 所包含的 field 的數量
  • 獲得所有的key :hkeys key
  • 獲得所有的value :hvals key

具體操作如圖

這里需要注意的是增加數字increment 可以是正數和負數

2.3字符串列表list

?在 Redis 中的 list 類型實際相當于雙向鏈表結構,可以在頭部(left)和尾部(right)添加新元素,在插入時,如果該鍵并不存在,Redis 會自動創建一個新的鏈表,如果鏈表中的元素全部被移除,那么該鍵也會被從數據庫中刪除,從元素插入和刪除的效率來看,在鏈表的兩頭插入和刪除元素,這樣的操作效率是非常高的。

  • 頭部插入:lpush key values[value1 value2...] 在指定的key所在頭部插入所有的values,如果該 key 不存在,該命令在插入之前會創建一個與該 key 關聯的空鏈表。插入成功,返回元素的個數
  • 尾部插入:rpush key values[value1 value2...]
  • 獲得鏈表中從start 到 end元素的值:lrange key start end ? ?若為-1則表示鏈表尾部元素,-2為倒數第二個
  • 頭部彈出:lpop key 返回并彈出指定的key 關聯的鏈表中第一個元素,如果key 不存在 返回nil
  • 尾部彈出:rpop key?
  • 獲得列表中元素格式:llen key
  • lpushx key value:當參數中指定的 key 存在時,向關聯的list的頭部插入 value。如果不存在,將不進行插入
  • rpushx key value:在該list的尾部添加
  • lrem key cont value :刪除 coount 個值為 value 的元素,如果count大于0,從頭到尾遍歷并刪除,如果count 小于0,則從尾向頭遍歷并刪除。如果 count 等于0,則刪除鏈表中所有等于value 的元素
  • lset key index value :設置鏈表中的index 的腳標的元素值,0代表鏈表的頭元素,-1代表鏈表的尾元素。角標不存在則拋異常
  • linsert key before|after pivot value :在 pivot 元素前或者后插入 value 這個元素
  • rpoplpush resource destination:將鏈表中的尾部元素彈出并添加到頭部(循環操作)

2.4字符串集合Set

?  在Redis 中,可以將 Set 類型看作為沒有排序的字符集合,Set 集合中不允許出現重復的元素

  • sadd key values[value1 value2...]:向 set 中添加數據,如果該 key 的值已有則不會重復添加
  • srem key members[member1 member2...]:刪除 set 中指定的成員
  • smembers key:獲得 set 中所有的成員
  • sismember key member:判斷參數中指定的成員是否在該 set 中,1表示存在,0表示不存在或key本身不存在
  • sdiff key1 key2...:返回 key1 與 key2 中相差的成員,而且與key的順序有關。即返回差集。(A-B)
  • sinter key1 key2 key3...:返回交集(A∩B)
  • sunion key1 key2 key3...:返回并集(A∪B)
  • scard key:獲取 set 中成員的數量
  • srandmember key:隨機返回 set 中的一個成員
  • sdiffsotre destination key1 key2...:將key1、key2相差的成員存儲在destination 上
  • sintersotre destination key[key...]:將返回的交集存儲在 destination上
  • sunionstore destination key[key...]:將返回的并集存儲在 destination 上

使用 Set 的時候要注意它的唯一性,比如用戶的ID 就是唯一的可以存放在Set 當中

2.5有序字符串集合Sorted Set

?  Sorted Set 和 Set極為相似,他們都是字符串集合,都不允許重復的成員出現在一個 Set中。它們之間主要的差別是 Sorted Set 中每一個成員都會有一個分數(score)與之關聯我們稱它為權重,Redis 也正是通過這個分數來進行從小到大的排序,要注意的是成員必須是唯一的,但分數是可以重復的。使用場景為游戲排名、微博熱點話題等

  • zadd key score member score2 member2...:將所有成員以及該成員的分數存放到sorted set 中,如果該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含之前已經存在的元素
  • zscore key member:返回指定成員分數
  • zcard key:獲取集合中的成員數量
  • zrem key member[member...]:移除集合中指定的成員,可以指定多個成員
  • zrange key start end [withscores]:獲得集合中腳標為start-end 的成員,[withscores]參數表明返回的成員包含其分數
  • zrevrange key start stop [withscores]:照元素分數從大到小的順序返回索引從start 到 stop之間的所有元素(包括兩端的元素)
  • zremrangebyrank key start stop:按照排名范圍刪除元素
  • zremrangebyscore key min max:按照分數范圍刪除元素
  • zrangebyscore key min max [withscores] [limit offset count]:返回分數在[min,max]的成員并按照分數從低到高排序。[withscores]:顯示分數:[limit offset count]:offset,表明從角標為offset的元素開始并返回count個成員
  • zincrby key increment member:設置指定成員的增加分數。返回值是更改后的分數
  • zcount key min max:獲取分數在[min,max]之間的成員
  • zrank key menber:返回成員在集合中的排名(從小到大)
  • zrevrank key member:返回成員在集合中的排名(從大到?。?/li>

有些不常用的到時候就來這里面查找就好了 請忽略手殘打錯字

3.keys通用操作

  • ?keys pattern:獲取所有與pattern匹配的key,返回所有與該key匹配的。 *表示任意或一個或多個字符,?表示任意一個字符
  • del key1 key2...:刪除指定的key
  • exists key:判斷該key 是否存在,1代表存在,0代表不存在
  • rename key newkey:為當前的key重命名
  • expire key:設置過期時間,單位:秒
  • ttl key:獲取該key 所剩的超時時間,如果沒有設置超時,返回-1.如果返回-2 表示超時不存在
  • type key:獲取指定 key 的類型。該命令將以字符串的格式返回。返回字符串為 string、list、set、hash、zshet,如果 key 不存在返回none

?

4.Redis特性

?一、Redis有多數據庫一共16個,下標從0到15,客戶端默認連接第0號數據庫,可以通過select選擇連接那個數據庫

  • select num:切換數據庫
  • move newkey 1:將當前庫的key移植到1號庫中
  • ping :測試連接是否還存活 PONG為存活
  • echo:在命令行打印一些內容
  • quit:退出連接
  • dbsize:返回當前數據庫中 key 的數目
  • info:獲取服務器的信息和統計
  • flushdb:刪除當前選擇數據庫中的所有 key
  • flushall:刪除所有數據庫中的所有 key

二、消息訂閱與發布

  • subscribe channel:訂閱頻道 eg:subscribe chat
  • psubscribe channel*:批量訂閱頻道 eg:psubscribe z*,訂閱z開頭的頻道
  • publish channel content:在指定頻道中發布消息,eg:publish chat "haha"

三、事務

  在事務執行期間,Redis 不會在為其它客戶端的請求提供任何服務,從而保證了事務中的所有命令被原子的執行,和關系型數據庫中的事務相比,在Redis 事務中如果有某一條命令執行失敗,其后的命令仍然會被繼續執行,在Redis中有三個事務的命令如下

  • multi:開啟事務用于標記事務的開始,其后執行的命令都將被存入命令隊列,直到執行 exec 時,這些命令才會被原子的執行,類似與關系型數據庫中的:begin transaction
  • exec:提交事務,類似與關系型數據庫中的:commit
  • discard:事務回滾,類似與關系型數據庫中的:rollback

?

當前文章:http://www.hfcxdn.com/html_88953.html

發布時間:2019-05-18 10:50:08

一年生連翹苗多少錢一棵? 陜西紫荊小苗都在哪買的? 云南哪里有賣海桐苗的? 米徑7公分美國紅楓什么價格能買到? 行道樹種櫻花間距多少米一棵? 北京可以栽植棕櫚樹嗎? 草坪種子播種后多少天才能發芽? 歐洲報春種子幾月播種最好?

米徑六公分的欒樹什么價格能買到? 加拿大紫荊種子幾月播種最好? 十月份種黑麥草種子行嗎? 10月可以播種大花飛燕草嗎? 金葉女貞種子每畝地用多少斤? 加拿利海棗種子播種前需要處理嗎? 烏桕育苗每畝播種量是多少斤? 重慶哪里有賣梔子花種子的? 江西哪里有賣油松種子的?

編輯:龍宗

我要說兩句: (0人參與)

發布
捕鱼达人之深海狩猎