Java連接redis和redis基本命令

redis-server.exe redis.windows.conf

按配置啓動redis服務

redis-cli.exe -h 127.0.0.1 -p 6379

啓動redis客戶端

set myKey abc    get myKey  del mykey

設置鍵值對key->value ,mykey->abc,獲取鍵值,刪除鍵

設置hash數據

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
"OK"
redis 127.0.0.1:6379> HGET runoob field1
"Hello"
redis 127.0.0.1:6379> HGET runoob field2
"World"

設置list數據

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>

Redis 的 Set 是 string 類型的無序集合。集合是通過哈希表實現的。

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob

1) "redis"
2) "rabitmq"
3) "mongodb"

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。

zset的成員是唯一的,但分數(score)卻可以重複。

zadd key score member 

實例

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 1000
1) "mongodb"
2) "rabitmq"
3) "redis"

Java連接redis

package test2;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Tuple;
 
public class JedisTest {
	
	public static void print(int index,Object obj) {
		System.out.println(String.format("%d %s", index, obj.toString()));
	}
	public static void print(String str,Object obj) {
		System.out.println(str+" "+obj.toString());
	}
	
    public static void main(String[] args) {
        //連接本地的 Redis 服務
        Jedis jedis = new Jedis("localhost");
        System.out.println("連接成功");
        //查看服務是否運行
        System.out.println("服務正在運行: "+jedis.ping());
        
//      jedis.flushAll();//將全部數據庫刪除
        
        jedis.set("hello", "world");//設置key-value
		print("String", jedis.get("hello"));
		
		jedis.rename("hello", "newhello");//修改key名
		print("rename String", jedis.get("newhello"));
		
		jedis.setex("key", 15, "value");//設置一個鍵值對,並設置其存在多少秒
		
		jedis.set("pv", "100");
		jedis.incr("pv");//將對應鍵的值加1
		print("100+1", jedis.get("pv"));
		jedis.incrBy("pv", 5);//將對應鍵的值加任意值
		print("100+5", jedis.get("pv"));
		
		//List(列表操作)
		String listName = "listA";
		for(int i = 0; i < 10; i++)
			jedis.lpush(listName, "a" + String.valueOf(i));//將值推入列表中
		
		print(3, jedis.lrange(listName, 0, 10));//從列表中取出索引爲0-10的值
		
		print(4, jedis.llen(listName));//返回該列表中有多少個元素
		
		print(5, jedis.lpop(listName));//將0位置的元素推出列表,並返回其值
		
		print(6, jedis.llen(listName));
		
		print(7, jedis.lindex(listName, 3));//返回下表爲3的元素
		
		print(10, jedis.lrange(listName, 0, 10));

		//Map
		String userKey = "userxx";
		jedis.hset(userKey, "name", "jim");
		jedis.hset(userKey, "age", "12");
		jedis.hset(userKey, "phone", "7456454");
		 
		print("hash", jedis.hget(userKey, "name"));
		print("hash_all", jedis.hgetAll(userKey));//獲取hash表中全部數據
		jedis.hdel(userKey, "phone");//hash表中刪除一個字段
		print("hash_all", jedis.hgetAll(userKey));
		
		print("hash_all_key", jedis.hkeys(userKey));//獲取hash表中所有的key
		print("hash_all_value", jedis.hvals(userKey));//獲取hash表中所有的value
		print("hash_exist_key", jedis.hexists(userKey, "email"));//判斷hash表中是否存在某字段
		
		jedis.hsetnx(userKey, "email", "123@77");//如果不存在某個字段,則添加該字段
		jedis.hsetnx(userKey, "name", "tom");//存在則不更新其值
		print("hash_all", jedis.hgetAll(userKey));
		
		//Set
		String likeKeys1 = "newsLike1";
		String likeKeys2 = "newsLike2";
		
		for(int i = 0; i < 10; i++) {
			jedis.sadd(likeKeys1, String.valueOf(i));//添加值到集合中
			jedis.sadd(likeKeys2, String.valueOf(i*2));
		}
		print("set_all_1", jedis.smembers(likeKeys1));//返回集合中的全部值
		print("set_all_2", jedis.smembers(likeKeys2));
		print("set_1_jiao_2", jedis.sinter(likeKeys1, likeKeys2));//兩個集合求交集
		print("set_1_bing_2", jedis.sunion(likeKeys1, likeKeys2));//兩個集合求並集
		print("set_diff", jedis.sdiff(likeKeys1, likeKeys2));//兩個集合不同(前者相對於後者)
		print("set_exist", jedis.sismember(likeKeys1, "5"));//判斷集合中是否存在某個值
		jedis.srem(likeKeys1, "5");//將某個值從集合中刪除
		print("set_all_1", jedis.smembers(likeKeys1));
		
		print("set_length_1", jedis.scard(likeKeys1));//返回該集合中有多少個值
		jedis.smove(likeKeys2, likeKeys1, "14");//將第一個集合中的某個值移動到第二個集合中
		print("set_all_1", jedis.smembers(likeKeys1));
		print("set_all_2", jedis.smembers(likeKeys2));
		
		
		//SortedSet(優先隊列)
		String rankKey = "rankKey";
		jedis.zadd(rankKey, 15, "jim");
		jedis.zadd(rankKey, 60, "Ben");
		jedis.zadd(rankKey, 90, "Lee");
		jedis.zadd(rankKey, 80, "Mei");
		jedis.zadd(rankKey, 75, "Lucy");
		print("zset_length", jedis.zcard(rankKey));//返回優先隊列中元素的個數
		print("zset_count", jedis.zcount(rankKey, 61, 100));//返回優先隊列中值在這個範圍內的有多少個
		print("zset_score", jedis.zscore(rankKey, "Lucy"));//返回某一個鍵的值
		jedis.zincrby(rankKey, 2, "Lucy");//將存在的Lucy的值加2
		print("zset_score", jedis.zscore(rankKey, "Lucy"));
		jedis.zincrby(rankKey, 2, "tom");//將不存在的tom的值加2,會創建一個tom
		print("zset_count", jedis.zcount(rankKey, 0, 100));
		print("zset_range", jedis.zrange(rankKey, 0, 3));//返回按值的升序排列中前四個值的鍵名
		print("zset_revrange", jedis.zrevrange(rankKey, 0, 4));//返回按值的降序排序中前四個值的鍵名
		
		for(Tuple tuple : jedis.zrangeByScoreWithScores(rankKey, "0", "100")) {
			print("zset", tuple.getElement() + ":" + String.valueOf(tuple.getScore()));
		}
		
		print("zset_rank", jedis.zrank(rankKey, "Ben"));//返回某個鍵名升序排第幾(實際是索引號)
		print("zset_revrank", jedis.zrevrank(rankKey, "Ben"));//返回某個鍵名降序排第幾(實際是索引號)

		//redis是單線程的,最多隻能用8個資源,所以每次用完需要關閉,可以通過關閉和不關閉測試
		JedisPool pool = new JedisPool();
		for(int i = 0; i < 20; i++) {
			Jedis j = pool.getResource();
			j.get("a");
			System.out.println("POOL" + i);
			j.close();
		}
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章