上文(http://www.imooc.com/article/16523)介绍了Redis概念,以及数据类型,安装等,此文将会介绍Java操作redis数据库的数据类型的一些实例。
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
下面将会给出实例:
1.Java操作Redis键(key)
package com.redis1;
import java.util.List;
import redis.clients.jedis.Jedis;
/**
* Redis keys实例
* @author dell
*
*/
public class RedisKeys {
public static void main(String[] args) {
//连接redis本地服务
Jedis jedis = new Jedis("127.0.0.1");
System.out.println("redis本地服务连接成功!");
/*Redis Bgsave 命令用于在后台异步保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,
原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
*/
System.out.println(jedis.bgsave());
//Redis Echo 命令用于打印给定的字符串。
System.out.println(jedis.echo("redis"));
//Redis Flushall 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。
System.out.println(jedis.flushAll());
//Redis Flushdb 命令用于清空当前数据库中的所有 key。
System.out.println(jedis.flushDB());
/*
Redis Ping 命令使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。
通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。
*/
System.out.println(jedis.ping());
//Redis Info 命令以一种易于理解和阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。
System.out.println("\ninfo----->"+jedis.info());
//Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。
System.out.println(jedis.randomKey());
//Redis Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
System.out.println(jedis.save());
//Redis Unwatch 命令用于取消 WATCH 命令对所有 key 的监视。
System.out.println(jedis.unwatch());
/*
Redis Multi 命令用于标记一个事务块的开始。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
*/
System.out.println(jedis.multi());
/*Redis Quit 命令用于关闭与当前客户端与redis服务的连接。
一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。*/
System.out.println(jedis.quit());
}
}
2.Java操作Redis列表(list)
package com.redis1;
import java.util.List;
import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;
/**
* redis list数据类型
*
* @author dell
*
*/
public class RedisList {
public static void main(String[] args) {
// 连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("redis本地服务连接成功!");
/*
* lpush 表示从list的头部插入元素 rpush 表示从list的尾部插入元素 linsert 在列表的某个元素前或者后插入元素
* index 表示列表中index位置的元素 llen 返回列表的长度 lpop list 0 -1
* 表示从mylist列表的头部开始删除所有元素 rpop list 0 -1 表示从mylist列表的尾部开始删除所有元素 lrange
* list 0 -1 //使用lrange取出元素 0表示从头部第一个元素,-1表示从尾部第一个元素取出,lrange mylist 0
* -1 表示取出mylist中的所有数据
*/
// 存储数据到列表中
jedis.lpush("SQL", "Redis");
jedis.lpush("SQL", "Mongodb");
jedis.lpush("SQL", "Mysql");
jedis.linsert("SQL", BinaryClient.LIST_POSITION.BEFORE, "MySql", "java");
jedis.rpush("SQL", "SqlServer");
jedis.rpush("SQL", "Oracle");
jedis.linsert("SQL", BinaryClient.LIST_POSITION.BEFORE, "MySql", "java");
// Redis Lpushx 将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。
System.out.println(jedis.lpushx("SQL", "Redis1"));
// 获取存储的数据并输出
List<String> list = jedis.lrange("SQL", 0, -1);
for (int i = 0; i < list.size(); i++) {
System.out.println("Stored string in redis:: " + list.get(i));
}
// 获得列表的长度
System.out.println("redis列表长度为:" + jedis.llen("SQL"));
// 删除列表中的元素
jedis.del("SQL");
System.out.println("删除了redis列表!");
// 获得列表的长度
System.out.println("redis列表长度为:" + jedis.llen("SQL"));
// 列表下标从0开始
System.out.println("redis列表下标为5的元素是:" + jedis.lindex("SQL", 5));
/*
* Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 下标 0
* 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2
* 表示列表的倒数第二个元素,以此类推。
*/
System.out.println(jedis.ltrim("SQL", 0, 4));
}
}
3.Java操作Redis集合(set)
package com.redis1;
import java.util.Set;
import redis.clients.jedis.Jedis;
/**
* Redis set数据类型
* @author dell
*
*/
public class RedisSet {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1",6379);
//set方法用于向redis数据库中添加设置数据
jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");
//get方法用于获取某个键所对应的值
System.out.println(jedis.get("k3"));
//del方法用于删除某个键所对应的值
System.out.println(jedis.del("k1"));
//getSet方法用户获取某个键所对应的值,键不存在,返回null;键存在,返回对应的值
System.out.println(jedis.getSet("k4", "v4"));
/*getrange(key, startOffset, endOffset)方法用于获取存在在key中字符串的子字符串
字符串的截取范围由start和end两个偏移量决定
*/
System.out.println(jedis.getrange("k2", 1, -1));
//lpop方法用于移除并返回列表的第一个元素
System.out.println(jedis.lpop("k1"));
//rpop方法用于移除并返回列表的最后一个元素
System.out.println(jedis.rpop("k5"));
//返回集合的长度
Set<String> sets = jedis.keys("*");
System.out.println(sets.size());
}
}
4.Java操作Redis字符串(String)
package com.redis1;
import redis.clients.jedis.Jedis;
/**
* Redis String数据类型
* @author dell
*
*/
public class RedisString {
public static void main(String[] args) {
//连接本地redis服务
Jedis jedis = new Jedis("127.0.0.1");
System.out.println("redis服务连接成功!");
//设置redis字符串数据
jedis.set("type", "string");
//获取存储的数据并输出
System.out.println("redis存储的值为:"+jedis.get("type"));
}
}
5.Java 操作Redis排序
package com.redis2;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
/**
* Redis排序
* @author dell
*
*/
public class Java_RedisTest {
private Jedis jedis;
@Before
public void setup(){
//连接redis服务器
jedis = new Jedis("127.0.0.1",6379);
//权限认证
//jedis.auth("admin");
}
@Test
public void test() throws InterruptedException{
//jedis排序
//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
jedis.del("a"); //先清除数据,在加入数据进行测试
jedis.rpush("a", "1");
jedis.rpush("a", "6");
jedis.rpush("a", "4");
jedis.rpush("a", "2");
jedis.rpush("a", "5");
jedis.rpush("a", "3");
//排序前
System.out.println("排序前:"+jedis.lrange("a", 0, -1));
//排序
System.out.println("排序:"+jedis.sort("a"));
//排序后
System.out.println("排序后:"+jedis.lrange("a", 0, -1));
}
}
更多实例代码,在此不再一一列举,感兴趣的朋友,实例代码见:
https://github.com/JavaCodeMood/redis1
多谢各位朋友的支持!