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