天天看點

Redis學習筆記(二)常用指令和Java連接配接操作

一、Redis mac可視化工具

二、redis常見指令學習

1.Reids list 學習  2.Reids hash 學習  3.Reids 字元串    4.Reids  Set類型   5.Reids  Sorted-set類型

三、java連接配接操作

一、Redis mac可視化工具

推薦一款mac上的redis的可視化工具redis-desktop-manager

下載下傳位址:連結:https://pan.baidu.com/s/1LrK4HCY2ndzwfSP15jiEiw  密碼:9i3i

Redis學習筆記(二)常用指令和Java連接配接操作

二、redis常見指令學習

 Redis的資料類型

 字元串清單(list)、哈希(hash)、字元串(String)、字元串集合(set)、有序字元集合(sorted set)

 1.redis list 學習

//左端插入資料
127.0.0.1:6379> lpush mylist abc 
(integer) 1

//右端插入資料
127.0.0.1:6379> rpush mylist2 123
(integer) 1

//查詢資料 注意這裡的-1指的是末尾的第一個元素
127.0.0.1:6379> lrange mylist 0 -1
1) "abc"

//彈出該元素  注意彈出後則沒有該元素
127.0.0.1:6379> lpop mylist     //還有右端彈出rpop mylist
"abc"
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)

//檢視長度
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> llen mylist
(integer) 3


//删除元素  
//lrem mylist 2 c //從頭到位删除兩個c
//lrem mylist -2 c //從尾到頭删除兩個c
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "c"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lrem mylist 2 c //從頭到位删除兩個c
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "b"
4) "a"


//設定值 
//指定某個位置添加元素
127.0.0.1:6379> lset mylist 3 mmm
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "b"
4) "mmm"

//插入值
//linsert mylist before b 11 在第一個b之前插入11
//linsert mylist after b 11  在第一個b之後插入11
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "b"
4) "mmm"
127.0.0.1:6379> linsert mylist before b 11
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "c"
3) "11"
4) "b"
5) "mmm"

//lpushx mylist x
//将值 value 插入到清單 key 的表頭,當且僅當 key 存在并且是一個清單。
//當 key 不存在時, lpushx指令什麼也不做
           

 2.redis hash 學習

每一個hash可以存儲4294967295個鍵值對。

//指派
//hset key field value
127.0.0.1:6379> hset myhash username xiangzaixiansheng
(integer) 0
127.0.0.1:6379> hset myhash age 18
(integer) 0

//多個指派
//hmset key field value [field value ...]
127.0.0.1:6379> hmset myhash2 username malatang age 21
OK

//取值
127.0.0.1:6379> hget myhash username
"xiangzaixiansheng"

//全部取出
127.0.0.1:6379> hgetall myhash
"xiangzaixiansheng"

//多個取值
127.0.0.1:6379> hmget myhash username age
1) "xiangzaixiansheng"
2) "18"

//删除  或者使用 del myhash2
127.0.0.1:6379> hdel myhash2 username age
(integer) 2


//增加(增加某個數值的大小)
127.0.0.1:6379> hincrby myhash age 5
(integer) 23


//判斷存在,如果存在則傳回1
127.0.0.1:6379> hexists myhash username
(integer) 1

//擷取所有屬性值
127.0.0.1:6379> hkeys myhash
1) "username"
2) "age"
127.0.0.1:6379> hvals myhash
1) "xiangzaixiansheng"
2) "23"

           

3.Reids 字元串

//指派 
//set key value [EX seconds] [PX milliseconds] [NX|XX]
 
127.0.0.1:6379> set company redis
 OK

//取值
//get key
127.0.0.1:6379> get company
"redis"

//删除
127.0.0.1:6379> del company
(integer) 1

//更改 先取值後更改數值
127.0.0.1:6379> getset company apple
"redis"
127.0.0.1:6379> get company
"apple"

//數值增加  如果沒有num的話先将num的值為0然後加1.如果不是整形會報錯
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"

//數值減少
127.0.0.1:6379> decr num
(integer) 0

//指定增加
127.0.0.1:6379> incrby num 5
(integer) 5

//指定減少
127.0.0.1:6379> decrby num 2
(integer) -2

//追加一個字元串
127.0.0.1:6379> get company
"apple"
127.0.0.1:6379> append company xiangzaixiansheng
(integer) 22
127.0.0.1:6379> get company
"applexiangzaixiansheng"
           

4.Reids  Set類型

需要注意的set不可以出現重複元素。并且可以很友善的對集合進行聚合操作。

主要使用場景:帶有唯一性的場景.

//添加
127.0.0.1:6379> sadd myset a b c
(integer) 3

//删除
127.0.0.1:6379> srem myset a
(integer) 1
127.0.0.1:6379> smembers myset
1) "c"
2) "b"

//檢視資料
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "a"

//判斷是否有某個元素  sismember key member
//判斷c 在不在myset中
127.0.0.1:6379> sismember myset c
(integer) 1

//差集運算(與key的順序有關) sdiff key [key ...]
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smembers myset2
1) "12"
2) "c"
127.0.0.1:6379> sdiff myset myset2
1) "b"

//交集運算  sinter key [key ...]
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smembers myset2
1) "12"
2) "c"
127.0.0.1:6379> sinter myset myset2
1) "c"

//并集運算 sunion key [key ...]
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smembers myset2
1) "12"
2) "c"
127.0.0.1:6379> sunion myset myset2
1) "12"
2) "c"
3) "b"

//擷取成員數量
127.0.0.1:6379> scard myset
(integer) 2

//随機傳回集合中的成員
127.0.0.1:6379> srandmember myset
"b"
127.0.0.1:6379> srandmember myset
"c"

//兩個集合相差的,存到另一個集合   注意:是把myset和myset1相差的元素存到mmset
127.0.0.1:6379> sdiffstore mmset myset myset1
(integer) 2
127.0.0.1:6379> smembers mmset
1) "c"
2) "b"

//兩個集合的交集存在另一個集合
127.0.0.1:6379> sinterstore mmmset myset myset1
(integer) 0


//兩個元素的并集存到另一個集合
127.0.0.1:6379> sunionstore my3 myset myset1
(integer) 2
127.0.0.1:6379> smembers my3
1) "c"
2) "b"
           

5.Reids  Sorted-set類型

Sorted-set中的成員在集合中的位置是有序的。

應用場景:遊戲排行榜、積分排行榜、建構索引資料等

//添加元素 zadd key [NX|XX] [CH] [INCR] score member [score member ...]
//我們向mysort中插入三組資料
127.0.0.1:6379> zadd mysort 70 lm 80 wh 90 xiangzai
(integer) 3

//擷取元素 zscore key member
127.0.0.1:6379> zscore mysort xiangzai
"90"

//擷取集合中的資料數量
127.0.0.1:6379> zcard mysort
(integer) 3


//查找範圍
//查找從頭到尾
127.0.0.1:6379> zrange mysort 0 -1
1) "lm"
2) "wh"
3) "xiangzai"
//加上關鍵字withscores把分數也列印出來
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"
3) "wh"
4) "80"
5) "xiangzai"
6) "90"

//從大到小 進行範圍掃描
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
1) "xiangzai"
2) "90"
3) "wh"
4) "80"
5) "lm"
6) "70"

//删除元素
//删除lm
127.0.0.1:6379> zrem mysort lm
(integer) 1
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
1) "xiangzai"
2) "90"
3) "wh"
4) "80"

//按範圍删除 zremrangebyrank key start stop
127.0.0.1:6379> zremrangebyrank mysort 0 4
(integer) 2

//按分數删除 删除80到100之間
127.0.0.1:6379> zadd mysort 70 lm 80 wh 90 xiangzai
(integer) 0
127.0.0.1:6379> zremrangebyscore mysort 80 100
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"

//從小到大顯示 (指定範圍,隻顯示2個)
127.0.0.1:6379> zadd mysort 70 lm 80 wh 90 xiangzai
(integer) 2
127.0.0.1:6379> zrangebyscore mysort 0 100 withscores limit 0 2
1) "lm"
2) "70"
3) "wh"
4) "80"

//給指定元素增加  zincrby key increment member
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"
3) "wh"
4) "80"
5) "xiangzai"
6) "90"
127.0.0.1:6379> zincrby mysort 5 xiangzai
"95"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "lm"
2) "70"
3) "wh"
4) "80"
5) "xiangzai"
6) "95"
//檢視80-90分之間的個數
127.0.0.1:6379> zcount mysort 80 90
(integer) 1
           

三、java連接配接操作

1.使用Jedis直接連接配接方法

public class TestJedis {
	public static void main(String[] args) {
	// TODO Auto-generated method stub
	Jedis jedis = new Jedis("127.0.0.1",6379);
        // jedis.auth("1234");
        //連接配接
        jedis.connect();
        //列出符合特定條件的key   其中pattern為比對條件,填*則為列出所有
        Set<String> keyList = jedis.keys("*");
        //foreach,将keyList的值,指派于key,并列印,之後,下個keyList值,指派于key并列印,以此類推,到最後,列印完,自動出"for(){}"往下運作
        for(String key : keyList) {
	      System.out.println(key);
        }
        //關閉連接配接
       jedis.disconnect();
	}
}
           

列印出來的值

Redis學習筆記(二)常用指令和Java連接配接操作

2.JedisPool連接配接

public void testJedisPool() {
		/**
		 * Jedis連接配接池管理方式連接配接Redis步驟:
		1、導入包(jedis-3.1.0.jar和commons-pool2-2.6.2.jar)
		2、獲得連接配接池配置對象JedisPoolConfig
		3、設定連接配接池資訊(最大連接配接數、最大空閑連接配接數、最小空閑連接配接數等)
		4、獲得連接配接池(new JedisPool(GenericObjectPoolConfig poolConfig,String host,int port))  
		5、獲得核心對象Jedis
		6、用Jedis操作Redis資料并取得結果
		7、關閉Jedis連接配接,關閉JedisPool連接配接池,釋放資源
		 */
		//建立連接配接池配置對象
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxTotal(25);//設定最大連接配接數
		config.setMaxIdle(20);
		config.setMinIdle(5);
		JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);
		//擷取核心對象
		Jedis jedis = pool.getResource();
		//驗證redis密碼,如果沒有設定密碼這段可以省略
		//jedis.auth("1234");//登入
	     jedis.select(0);//選擇DB0資料庫
	     Set<String> keyList = jedis.keys("*");
        
		//周遊map元素
		for(String key : keyList){
			//jedis.type(String key)傳回給定key所儲存的值的類型。 none(key不存在),string(字元串),list(清單),set(集合),zset(有序集),hash(哈希表) 
			System.out.println("key=="+key+",type="+jedis.type(key));
		    
           //取出map元素	
           if(jedis.type(key).equals("hash")) {
			System.out.println("Hashvalue=" + jedis.hgetAll(key));
			//取出全部
			Map<String,String> map = jedis.hgetAll(key);
			Set<String> set = map.keySet();
			Iterator<String> iterator = set.iterator();
			while(iterator.hasNext()){
				String field = iterator.next();
				System.out.println(field+"===="+map.get(field));
				}
			}
		}else if(jedis.type(key).equals("list")) {
				//查詢元素
				System.out.println("List value =         " + jedis.lrange(key, 0, -1));
				//查詢目前list的長度
				System.out.println("List的length函數===" + jedis.llen(key));
				//周遊元素
				List<String> list = jedis.lrange(key, 0, jedis.llen(key) - 1);
				for(String keys:list){
					System.out.println("List value = " + keys);
				}
		}else if(jedis.type(key).equals("set")) {
				System.out.println("Set value=         " + jedis.smembers(key));
				Set<String> set = jedis.smembers(key);
				for(String sets : set) {
					System.out.println("Set value =" + sets);					
				}else if(jedis.type(key).equals("zset")) {
				Set<Tuple> setsSet = jedis.zrangeWithScores(key, 0, jedis.zcard(key) - 1);
				System.out.println("Set value =" + setsSet);
				
			}
			}

		
		jedis.close();
		pool.close();
		
	}