1. 程式人生 > >redis -java客戶端jedis

redis -java客戶端jedis

接上一篇

1 key可以有過期的設定

2 Lists 列表
插入元素很快,
按索引查詢,慢

//列表是自動建立和刪除的

//從左側新增給List1 一個值 1
lpush list1 1

//從右側新增2
rpush list1 2

//返回list1的值,從索引0 到最後
lrange list1 0 -1

//可變引數
lpush list1 1 3 3 2

//從list中右側那一個查詢並刪除
rpop list1

//子列表,其他的被刪除
//保留list中索引0 ~ 2的,並返回,其他的刪除
ltrim list1 0 2

//實現佇列. 左側新增(生產),右側彈出(消費)
//如果右側彈出為nil,那麼會等待一段時間再彈
lpush list1 666
rpop list1

//實現阻塞佇列
//block right pop 從list1中右側彈出元素,如果為null,那麼等待(阻塞)5秒
//直到有元素返回 0為一直阻塞(問,中間多久輪詢一次?)
brpop list1 5

3 hash(map)

//建立表hash_user1 ,裡面的key-value對,分別為name:wanganyu 等等
hmset hash_user1 name wanganyu age 23 address 回龍觀東大街

//從hash中獲得key為name的value
hget hash_user1 name

//獲得全部value
hgetall hash_user1

//返回hash中key為name ,age的值得陣列
hmget hash_user1 name age

4 set(集合)
無序

//新增
sadd set1 1 3 6

//檢視元素(返回的是無序的)
smembers set1

//檢視是否存在某元素
sismember set1 3
返回1 ,否則返回0

//刪除元素並返回(隨機)
spop set1

//交集 操作
sinter set1 set2 set3

//並集操作
sadd set1 set2

5 有序集合
新增時慢(因為要排序),取時快(因為有序了)
//新增 下面的2,56是分數, 是排序的依據
zadd zset1 2 “tom”
zadd zset1 56 “john”

//檢視元素(從第0個到倒數第一個)
zrange zset1 0 -1

//反序檢視
zrevrange zset1 0 -1

//根據分數返回 (小於某值的所有)
zrangebyscore zset1 -inf 4

//根據分數刪除(分數在2到8之間)
zremrangebyscore zset1 2 8

//獲得元素的位置
zrank zset1 “tom”

6 點陣圖(bitmaps)
基體是一個字串,每一個是一個‘位’,值為0或者1 。
//設定某位的值(字串bm1,第10位設定為1)
setbit bm1 10 1

//取某位的值(返回1,或者0)
getbit bm1 10

//計算所有值為1的位的數量
bitcount bm1

//找到第一個為1的位(索引)
bitpos bm1

7 redis可以像zookeeper一樣,實現釋出訂閱的功能

8 事務
格式如下:
//標記一個事務塊的開始
multi

命令1
命令2

//執行上述命令
exec

8-2:
其他: discard 取消事務

9 指令碼
除了執行一條命令,還可以執行指令碼
使用eval
eval “return xxxxx”

10 管理伺服器
10-1 檢視資訊
info
11 管道技術
其實就是 一次性提交多個請求到server,然後一次性返回所有響應,
以此提升效能

採用橋接(跟主機平行的關係)的網路連線方式,
我本機ip192.168.1.102,虛擬機器ip 106

使用如下程式碼測試連線時,出現一些問題,最終解決,列印了PONG(通)
Jedis jedis = new Jedis(“192.168.1.106”,6379);

System.out.println(jedis.ping());

問題1:連線不上redis.雖然ping的tong106.
解決: 關閉虛擬機器的防火牆,重啟虛擬機器。
方法為,在終端執行chkconfig iptables off

問題2:提示 DENIED Redis is running in protected mode because protected mode is enabled 等錯誤
解決:vim編輯redis.config檔案,把保護模式變為no.重啟
如果提示readonly不能儲存檔案,那麼使用sudo vim

測試是否能連上虛擬機器配置的redis服務


/***
 * 測試是否能連上虛擬機器配置的redis服務
 * @author wangany
 *
 */
public class JedisConnectTest {


    /**
     * @param args
     */
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.1.106",6379);
        System.out.println(jedis.ping());
    }

    public void testStringKey(){

    }

}

建立連線池物件

/***
 * 真實環境,獲得jedis連線 要使用連線池
 * 
 * 
 * @author wangany
 *
 */
public class JedisPoolUtil {

    private static JedisPool jedisPool;//連線池物件

    /***
     * 從連線池中 獲取一個jedis物件
     * @return
     */
    public static Jedis getJedis(){
        if(jedisPool==null){
            iniPool();
        }
        return jedisPool.getResource();
    }

    /***
     * 初始化連線池物件
     */
    public static void iniPool(){
        if(jedisPool==null){
            createPool();
        }
    }

    /***
     * 建立連線池物件
     * 
     * 真實環境,配置的資訊要抽離出來
     */
    public static void createPool(){
        // 建立連線池配置引數
        JedisPoolConfig config = new JedisPoolConfig();

        // 設定最大連線數
        config.setMaxIdle(100);

        // 設定最大阻塞時間,記住是毫秒數milliseconds
        config.setMaxWaitMillis(1000);

        // 設定空間連線
        config.setMaxIdle(10);

        // 建立連線池
        jedisPool = new JedisPool(config, "192.168.1.106", 6379);
    }

    /***
     * 回收一個jedis物件到連線池
     * @param jedis
     */
    public static void gc(Jedis jedis){
        jedisPool.returnResource(jedis);
    }

常用的操作

/***
 * 常用的操作
 * key 
 * list
 * set
 * hset等
 * @author wangany
 *
 */
public class JedisCommonOpt {

    private static Jedis jedis;

    public JedisCommonOpt() {
        jedis = getJedis();
    }

    public static Jedis getJedis(){
        if(jedis==null){
            jedis = JedisPoolUtil.getJedis();
        }
        return jedis;
    }

    /***
     * 測試 key
     */
    public void testKey() {
        jedis.set("key1", "value1");
        String value1 = jedis.get("key1");
        System.out.println(value1);
    }

    /***
     * 測試 list
     */
    public void testList() {
        String[] valueOfList1 = {"value1OfList1","value2OfList1","value3OfList1"};
        jedis.lpush("list1", valueOfList1);

        // 獲取儲存的資料並輸出
         List list = jedis.lrange("list1", 0 ,-1);
         for(int i=0; i<list.size(); i++) {
           System.out.println("Stored string in redis:list1: "+list.get(i));
         }
    }

    public static void main(String[] args) {
        JedisCommonOpt opt = new JedisCommonOpt();
        //opt.testKey();
        opt.testList();
    }
}