Java操作Redis详细介绍
|
1. 简介 Redis 是一个开源(BSD许可)的,内存中的key-value存储系统,它可以用作数据库、缓存和消息中间件。 2. 对key的操作 首先要建立连接Jedis jedis = new Jedis("127.0.0.1",6379),然后就可以对string,set,zset,hash进行操作了。
//对key的测试
public void keyTest() {
System.out.println(jedis.flushDB());
//清空数据
System.out.println(jedis.echo("hello"));
//打印hello
System.out.println(jedis.exists("foo"));
//判断key是否存在
jedis.set("key1","values1");
jedis.set("key2","values2");
System.out.println(jedis.exists("key1"));
//判断key是否存在
String randomKey = jedis.randomKey();
//选择一个随机的key
System.out.println("randomKey的为: " + randomKey);
jedis.expire("key1",60);
//生存时间
System.out.println(jedis.pttl("key1"));
//剩下的生存时间
//移除key的过期时间
jedis.persist("key1");
// 获取key的类型,"string","list","set" "none" none表示key不存在
System.out.println("type的类型为: " + jedis.type("key1"));
//key的类型
// 导出key的值
String value = jedis.get("key1");
System.out.println(value);
// 将key重命名
jedis.renamenx("key1","keytest");
System.out.println("key1是否存在: " + jedis.exists("key1"));
// 判断是否存在
System.out.println("keytest是否存在: " + jedis.exists("keytest"));
// 判断是否存在
// 查询匹配的key
// KEYS * 匹配数据库中所有 key 。
// KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
// KEYS h*llo 匹配 hllo 和 heeeeello 等。
// KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
// 特殊符号用 隔开。
Set<string> set = jedis.keys("k*");
//获取所有相关的key keys方法
System.out.println(set);
jedis.del("key1");
// 删除key del方法
System.out.println(jedis.exists("key1"));
}
3. String数据类型 set mystr "hello world!" //设置字符串类型 get mystr //读取字符串类型 对字符串进行数值操作 127.0.0.1:6379> set mynum "2" OK 127.0.0.1:6379> get mynum "2" 127.0.0.1:6379> incr mynum (integer) 3 127.0.0.1:6379> get mynum "3" Java操作代码为:
//对string操作的测试
public void stringTest() {
jedis.set("hello","hello");
//set
System.out.println(jedis.get("hello"));
//get
// 使用append 向字符串后面添加
jedis.append("hello"," world");
//追加 append方法
System.out.println(jedis.get("hello"));
// set覆盖字符串
jedis.set("hello","123");
System.out.println(jedis.get("hello"));
// 设置过期时间
jedis.setex("hello2",2,"world2");
System.out.println(jedis.get("hello2"));
try {
Thread.sleep(3000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(jedis.get("hello2"));
// 一次添加多个key-value对
jedis.mset("a","1","b","2");
// 获取a和b的value
List<string> valus = jedis.mget("a","b");
System.out.println(valus);
// 批量删除
jedis.del("a","b");
System.out.println(jedis.exists("a"));
System.out.println(jedis.exists("b"));
}
4. List数据类型 redis中的lists在底层实现上并不是数组,而是链表。 一系列操作:RPUSH,LPUSH,LLEN,LRANGE,LPOP和 RPOP。 我们可以用LPUSH在lists的左侧插入一个新元素,用RPUSH在lists的右侧插入一个新元素,用LRANGE命令从lists中指定一个范围来提取元素。 //新建一个list叫做mylist,并在列表头部插入元素"1" 127.0.0.1:6379> lpush mylist "1" //返回当前mylist中的元素个数 (integer) 1 //在mylist右侧插入元素"2" 127.0.0.1:6379> rpush mylist "2" (integer) 2 //在mylist左侧插入元素"0" 127.0.0.1:6379> lpush mylist "0" (integer) 3 //列出mylist中从编号0到编号1的元素 127.0.0.1:6379> lrange mylist 0 1 1) "0" 2) "1" //列出mylist中从编号0到倒数第一个元素 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "1" 3) "2" Java操作代码为:
public void listTest() {
String key = "mylist";
jedis.del(key);
//把之前的删除
// 队列添加元素
jedis.rpush(key,"aaaa");
jedis.rpush(key,"bbbb");
jedis.rpush(key,"cccc");
jedis.rpush(key,"cccc");
//队列长度
System.out.println("lenth: " + jedis.llen(key));
// 打印队列,从索引0开始,到倒数第1个(全部元素)
System.out.println("all elements: " + jedis.lrange(key,-1));
// 索引为1的元素
System.out.println("index of 1: " + jedis.lindex(key,1));
// 设置队列里面一个元素的值,当index超出范围时会返回一个error。
jedis.lset(key,1,"aa22");
System.out.println("index of 1: " + jedis.lindex(key,1));
// 从队列的右边入队一个元素
jedis.rpush(key,"-2","-1");
// 先-2,后-1入队列
System.out.println("all elements: " + jedis.lrange(key,-1));
// 从队列的左边入队一个或多个元素
jedis.lpush(key,"second element","first element");
// 先second
// element,后first
// elementF入队列
System.out.println("all elements: " + jedis.lrange(key,-1));
// 从队列的右边出队一个元素
System.out.println(jedis.rpop(key));
// 从队列的左边出队一个元素
System.out.println(jedis.lpop(key));
System.out.println("all elements: " + jedis.lrange(key,-1));
// count > 0: 从头往尾移除值为 value 的元素,count为移除的个数。
// count < 0: 从尾往头移除值为 value 的元素,count为移除的个数。
// count = 0: 移除所有值为 value 的元素。
jedis.lrem(key,"cccc");
System.out.println("all elements: " + jedis.lrange(key,-1));
// 即最右边的那个元素也会被包含在内。 如果start比list的尾部下标大的时候,会返回一个空列表。
// 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。
System.out.println(jedis.lrange(key,2));
System.out.println("all elements: " + jedis.lrange(key,-1));
// 删除区间以外的元素
System.out.println(jedis.ltrim(key,-1));
}
5. Set类型 redis的集合,是一种无序的集合,集合中的元素没有先后顺序。 //向集合myset中加入一个新元素"one" 127.0.0.1:6379> sadd myset "one" (integer) 1 127.0.0.1:6379> sadd myset "two" (integer) 1 //列出集合myset中的所有元素 127.0.0.1:6379> smembers myset 1) "one" 2) "two" //判断元素1是否在集合myset中,返回1表示存在 127.0.0.1:6379> sismember myset "one" (integer) 1 //判断元素3是否在集合myset中,返回0表示不存在 127.0.0.1:6379> sismember myset "three" (integer) 0 //新建一个新的集合yourset 127.0.0.1:6379> sadd yourset "1" (integer) 1 127.0.0.1:6379> sadd yourset "2" (integer) 1 127.0.0.1:6379> smembers yourset 1) "1" 2) "2" //对两个集合求并集 127.0.0.1:6379> sunion myset yourset 1) "1" 2) "one" 3) "2" 4) "two" Java操作代码:
public void setTest() {
// 清空数据
System.out.println(jedis.flushDB());
String key = "myset1";
String key2 = "myset2";
// 集合添加元素
jedis.sadd(key,"aaa","bbb","ccc");
jedis.sadd(key2,"ccc","ddd");
// 获取集合里面的元素数量
System.out.println(jedis.scard(key));
//the number count of the set
// 获得两个集合的交集,并存储在一个关键的结果集
jedis.sinterstore("destination",key,key2);
System.out.println(jedis.smembers("destination"));
// 获得两个集合的并集,并存储在一个关键的结果集
jedis.sunionstore("destination",key2);
System.out.println(jedis.smembers("destination"));
// key1集合中,key2集合没有的元素,并存储在一个关键的结果集
jedis.sdiffstore("destination",key2);
System.out.println(jedis.smembers("destination"));
// 确定某个元素是一个集合的成员
System.out.println(jedis.sismember(key,"aaa"));
// 从key集合里面随机获取一个元素
System.out.println(jedis.srandmember(key));
// aaa从key移动到key2集合
jedis.smove(key,key2,"aaa");
System.out.println(jedis.smembers(key));
//获取集合中的元素
System.out.println(jedis.smembers(key2));
// 删除并获取一个集合里面的元素
System.out.println(jedis.spop(key));
// 从集合里删除一个或多个元素
jedis.srem(key2,"ddd");
System.out.println(jedis.smembers(key2));
}
6. Sorted Sets类型 我们都将redis中的有序集合叫做zsets //新增一个有序集合myzset,并加入一个元素baidu.com,给它赋予的序号是1 127.0.0.1:6379> zadd myzset 1 baidu.com (integer) 1 //向myzset中新增一个元素360.com,赋予它的序号是3 127.0.0.1:6379> zadd myzset 3 360.com (integer) 1 //向myzset中新增一个元素google.com,赋予它的序号是2 127.0.0.1:6379> zadd myzset 2 google.com (integer) 1 //列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。 127.0.0.1:6379> zrange myzset 0 -1 with scores 1) "baidu.com" 2) "1" 3) "google.com" 4) "2" 5) "360.com" 6) "3" //只列出myzset的元素 127.0.0.1:6379> zrange myzset 0 -1 1) "baidu.com" 2) "google.com" 3) "360.com" (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
