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();
}
}
}