Java中使用Jedis操作Redis

來源:互聯網
上載者:User

標籤:解壓縮   except   擷取   sre   control   param   div   res   port   

一.   redis的安裝

1.下載源碼,解壓縮後編譯源碼。

[[email protected] ~]#  tar xzf redis-2.8.3.tar.gz

 

 [[email protected] ~]# cd redis-2.8.3

 

 [[email protected] ~]# make

 

2.啟動Redis服務。(src在redis-2.8.3下)

 

[[email protected] ~]#  cd src

[[email protected] ~] ./redis-server

 

3.串連redis用戶端

 [[email protected] ~]#  ./redis-cli

4.測試,redis的ip即為機器的ip,連接埠預設為6379

 127.0.0.1:6379> set ‘hello‘ ‘test‘

OK

127.0.0.1:6379> get hello

"test"

 

二.   java操作redis

1.直接連接redis,並操作redis

package com.sinovatech.mactivity.web.controller;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.junit.Before;import org.junit.Test;import redis.clients.jedis.Jedis;public class TestredisOwn {    private Jedis jedis;         @Before    public void setup() {        //串連redis伺服器,192.168.0.100:6379        jedis = new Jedis("10.143.131.63", 6378);        //許可權認證        //jedis.auth("admin");      }        /**     * redis儲存字串     */    @Test    public void testString() {        //-----添加資料----------          jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin          System.out.println(jedis.get("name"));//執行結果:xinxin                  jedis.append("name", " is my lover"); //拼接        System.out.println(jedis.get("name"));                 jedis.del("name");  //刪除某個鍵        System.out.println(jedis.get("name"));        //設定多個索引值對        jedis.mset("name","liuling","age","23","qq","476777XXX");        jedis.incr("age"); //進行加1操作        System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));            }        /**     * redis操作Map     */    @Test    public void testMap() {        //-----添加資料----------          Map<String, String> map = new HashMap<String, String>();        map.put("name", "xinxin");        map.put("age", "22");        map.put("qq", "123456");        jedis.hmset("user",map);        //取出user中的name,執行結果:[minxr]-->注意結果是一個泛型的List          //第一個參數是存入redis中map對象的key,後面跟的是放入map中的對象的key,後面的key可以跟多個,是可變參數          List<String> rsmap = jedis.hmget("user", "name", "age", "qq");        System.out.println(rsmap);            //刪除map中的某個索引值          jedis.hdel("user","age");        System.out.println(jedis.hmget("user", "age")); //因為刪除了,所以返回的是null          System.out.println(jedis.hlen("user")); //返回key為user的鍵中存放的值的個數2         System.out.println(jedis.exists("user"));//是否存在key為user的記錄 返回true          System.out.println(jedis.hkeys("user"));//返回map對象中的所有key          System.out.println(jedis.hvals("user"));//返回map對象中的所有value           Iterator<String> iter=jedis.hkeys("user").iterator();          while (iter.hasNext()){              String key = iter.next();              System.out.println(key+":"+jedis.hmget("user",key));          }      }        /**      * jedis操作List      */      @Test      public void testList(){          //lpush將資料從鏈表的頭部插入,如果沒有該key,在插入之前建立與key關聯的空鏈表        jedis.lpush("java framework","spring");          jedis.lpush("java framework","struts");          jedis.lpush("java framework","hibernate");          //rpush將資料從鏈表的尾部插入元素,如果沒有該key,在插入前穿件與該key關聯的空鏈表        jedis.rpush("java frameworkr", "spring");        jedis.rpush("java frameworkr", "struts");        jedis.rpush("java frameworkr", "hibernate");        //lpop,取出鏈表的頭部元素,沒有返回null        jedis.lpop("java framework");        //rpop取出鏈表的尾部元素,key不存在返回null        jedis.rpop("java framework");        //再取出所有資料jedis.lrange是按範圍取出,          // 第一個是key,第二個是起始位置,第三個是結束位置,jedis.llen擷取長度 -1表示取得所有          System.out.println(jedis.lrange("java framework",0,-1));              }          /**      * jedis操作Set      */      @Test      public void testSet(){          //添加          jedis.sadd("user","liuling");          jedis.sadd("user","xinxin");          jedis.sadd("user","ling");          jedis.sadd("user","zhangxinxin");        jedis.sadd("user","who");          //移除noname          jedis.srem("user","who");          System.out.println(jedis.smembers("user"));//擷取所有加入的value          System.out.println(jedis.sismember("user", "who"));//判斷 who 是否是user集合的元素          System.out.println(jedis.srandmember("user"));          System.out.println(jedis.scard("user"));//返回集合的元素個數      }        @Test      public void test() throws InterruptedException {          //jedis 排序          //注意,此處的rpush和lpush是List的操作。是一個雙向鏈表(但從表現來看的)          jedis.del("a");//先清除資料,再加入資料進行測試          jedis.rpush("a", "1");          jedis.lpush("a","6");          jedis.lpush("a","3");          jedis.lpush("a","9");          System.out.println(jedis.lrange("a",0,-1));// [9, 3, 6, 1]          System.out.println(jedis.sort("a")); //[1, 3, 6, 9]  //輸入排序後結果          System.out.println(jedis.lrange("a",0,-1));      }      //下面方法調用redis中的串連池    @Test    public void testRedisPool() {    TestRedisUtil.getJedis().set("newname", "中文測試");        System.out.println(TestRedisUtil.getJedis().get("newname"));    }    public static  void main(){    Jedis jedis=TestRedisUtil.getJedis();    jedis.set("testrediskey001", "testrediskey001");    String getvalue=jedis.get("testrediskey001");    System.out.println(getvalue);    }}

 2.建立redis串連池,並操作使用redis

①Redis串連池的建立

package com.sinovatech.mactivity.web.controller;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public final class TestRedisUtil {        //Redis伺服器IP    private static String ADDR = "10.143.131.63";        //Redis的連接埠號碼    private static int PORT = 6378;        //訪問密碼    private static String AUTH = "admin";        //可用串連執行個體的最大數目,預設值為8;    //如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis執行個體,則此時pool的狀態為exhausted(耗盡)。    private static int MAX_ACTIVE = 1024;        //控制一個pool最多有多少個狀態為idle(閒置)的jedis執行個體,預設值也是8。    private static int MAX_IDLE = 200;        //等待可用串連的最大時間,單位毫秒,預設值為-1,表示永不逾時。如果超過等待時間,則直接拋出JedisConnectionException;    private static int MAX_WAIT = 10000;        private static int TIMEOUT = 10000;        //在borrow一個jedis執行個體時,是否提前進行validate操作;如果為true,則得到的jedis執行個體均是可用的;    private static boolean TEST_ON_BORROW = true;        private static JedisPool jedisPool = null;        /**     * 初始化Redis串連池     */    static {        try {            JedisPoolConfig config = new JedisPoolConfig();            config.setMaxIdle(MAX_ACTIVE);            config.setMaxIdle(MAX_IDLE);            config.setMaxWaitMillis(MAX_WAIT);            config.setTestOnBorrow(TEST_ON_BORROW);            jedisPool = new JedisPool(config, ADDR, PORT);        } catch (Exception e) {            e.printStackTrace();        }    }        /**     * 擷取Jedis執行個體     * @return     */    public synchronized static Jedis getJedis() {        try {            if (jedisPool != null) {                Jedis resource = jedisPool.getResource();                return resource;            } else {                return null;            }        } catch (Exception e) {            e.printStackTrace();            return null;        }    }        /**     * 釋放jedis資源     * @param jedis     */    public static void returnResource(final Jedis jedis) {        if (jedis != null) {            jedisPool.returnResource(jedis);        }    }}

 

②使用建立好的redis串連池操作redis

package com.sinovatech.mactivity.web.controller;import redis.clients.jedis.Jedis;public class TestRedisOwnNew {public static void main(String[] args) {// TODO Auto-generated method stubJedis jedis=TestRedisUtil.getJedis();    jedis.set("testrediskey001", "testrediskey001");    String getvalue=jedis.get("testrediskey001");    System.out.println(getvalue);    jedis.del("testrediskey001");    }}

 

三.Redis常用方法

1.redis儲存字串:

① //-----添加資料---------- 調用set方法

        jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin 

        System.out.println(jedis.get("name"));//執行結果:xinxin 

        jedis.append("name", " is my lover"); //拼接

        System.out.println(jedis.get("name"));

②//刪除資料,調用del方法

        jedis.del("name");  //刪除某個鍵

        System.out.println(jedis.get("name"));

③//設定多個索引值對,調用mset方法參數格式為(key,value,key,value)

        jedis.mset("name","liuling","age","23","qq","476777XXX");

④//incr方法,對某個key的value值進行加1操作,如果沒有該key會自動建立,並加1

        jedis.incr("age"); //進行加1操作

        System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));

2. redis操作Map

①//-----添加資料---------- 調 hmset方法,放入一個map

        Map<String, String> map = new HashMap<String, String>();

        map.put("name", "xinxin");

        map.put("age", "22");

        map.put("qq", "123456");

        jedis.hmset("user",map);

        //取出user中的name,執行結果:[minxr]-->注意結果是一個泛型的List 

        //第一個參數是存入redis中map對象的key,後面跟的是放入map中的對象的key,後面的key可以跟多個,是可變參數 

② //取資料,調用hmget方法,參數是之前放入的map的key,返回的是一個list

        List<String> rsmap = jedis.hmget("user", "name", "age", "qq");

        System.out.println(rsmap); 

 

 ③ //刪除map中的某個索引值 ,調用hdel方法,可是刪除多個鍵

        jedis.hdel("user","age");

        System.out.println(jedis.hmget("user", "age")); //因為刪除了,所以返回的是null 

        System.out.println(jedis.hlen("user")); //返回key為user的鍵中存放的值的個數2

        System.out.println(jedis.exists("user"));//是否存在key為user的記錄 返回true 

        System.out.println(jedis.hkeys("user"));//返回map對象中的所有key 

        System.out.println(jedis.hvals("user"));//返回map對象中的所有value

 

        Iterator<String> iter=jedis.hkeys("user").iterator(); 

        while (iter.hasNext()){ 

            String key = iter.next(); 

            System.out.println(key+":"+jedis.hmget("user",key)); 

        } 

3.jedis操作List

①//lpush將資料從鏈表的頭部插入,如果沒有該key,在插入之前建立與key關聯的空鏈表

        jedis.lpush("java framework","spring"); 

        jedis.lpush("java framework","struts"); 

        jedis.lpush("java framework","hibernate");

②//rpush將資料從鏈表的尾部插入元素,如果沒有該key,在插入前穿件與該key關聯的空鏈表

        jedis.rpush("java frameworkr", "spring");

        jedis.rpush("java frameworkr", "struts");

        jedis.rpush("java frameworkr", "hibernate");

③//lpop,取出鏈表的頭部元素,沒有返回null

        jedis.lpop("java framework");

④ //rpop取出鏈表的尾部元素,key不存在返回null

        jedis.rpop("java framework");

⑤ //再取出所有資料jedis.lrange是按範圍取出, 第一個是key,第二個是起始位置,第三個是結束位置,jedis.llen擷取長度 -1表示取得所有

        System.out.println(jedis.lrange("java framework",0,-1)); 

 

Java中使用Jedis操作Redis

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.