Redis简介
Redis 是一个 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis数据类型
Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)。
Jedis基本操作
Jedis是Redis官方推荐的Java连接开发工具。
新建Test类,新建main方法作为入口方法。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class Test {
static Jedis jedis = new Jedis("127.0.0.1");//创建Jedis对象,指定host
public static void main(String[] args) {
System.out.println("服务器连接成功!-------->"+jedis.ping());
//调用数据操作方法
...
}
//数据操作方法
...
}
string
string 是 Redis 最基本的数据类型。一个 key 对应一个 value,就像是 java 中的 map 一样。
//string类型操作方法
public static void setString(){
System.out.println("存储数据到string类型中去------->");
jedis.set("username","wangwu");
String username = jedis.get("username");
}
在Redis Desktop Manager中查看是否持久化到数据库。
hash
Redis hash 是一个 string 类型的 key 和 value 的映射表,hash 特别适合用于存储对象。
string 是 一个 key - value 键值对,而 hash 是多个 key - value 键值对。
public static void redisHash(){
jedis.hset("list1","name","lisi");
jedis.hset("list1","country","中国");
String hget = jedis.hget("list1", "country");//获取单个值
Map<String, String> list1 = jedis.hgetAll("list1");//获取所有键值对
}
list
Redis 列表是简单的字符串列表,按照插入顺序排序。我们可以网列表的左边或者右边添加元素,元素可重复。
public static void redisList() {
jedis.lpush("student", "stu1");
jedis.lpush("student", "stu2");
jedis.lpush("student", "stu3");
jedis.lpush("student", "stu4");
jedis.lpush("student", "stu5");
List<String> student = jedis.lrange("student", 0,
jedis.llen("student"));
System.out.println(student);
//弹出元素
System.out.println("弹出一个元素:"+jedis.lpop("student"));
System.out.println("弹出一个元素:"+jedis.lpop("student"));
System.out.println("弹出一个元素:"+jedis.lpop("student"));
System.out.println(jedis.llen("student"));
}
运行截图:
set
Redis 的 set 是字符串类型的无序集合,集合内的元素不能重复。
集合是通过哈希表实现的,因此添加、删除、查找的复杂度都是 O(1)。
public static void RedisSet(){
//数据存储
jedis.sadd("t02","李四");
jedis.sadd("t02","王五");
Set<String> t01 = jedis.smembers("t02");
Iterator<String> it = t01.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
zset
Redis zset 和 set 一样都是字符串类型元素的集合,并且集合内的元素不能重复。
不同的是,zset 每个元素都会关联一个 double 类型的分数。redis 通过分数来为集合中的成员进行从小到大的排序。
zset 的元素是唯一的,但是分数(score)却可以重复。
public static void redisZset(){
jedis.zadd("zname",20,"mem1");
jedis.zadd("zname",30,"mem2");
jedis.zadd("zname",10,"mem3");
Set<String> zrange = jedis.zrange("zname", 0, -1);
}
事务操作
//redis的事务操作
public static void trans(){
Transaction multi = jedis.multi();//得到一个事务
multi.set("tname","blob");
multi.exec();//提交事务不进行回滚
System.out.println(jedis.get("tname"));
jedis.quit();
}