Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。本文将概要介绍Redis的特性和语法,并以实例代码的形式介绍如何通过Jedis在java语言环境下控制Redis,帮助各位读者快速入门。
NoSQL概述
Redis是NoSQL数据库的代表之一,那什么是NoSQL?
NoSQL = not only SQL,即非关系型数据库。
Why NoSQL?
和传统的关系型数据库相比,NoSQL具有以下的优势:
High Performance:高并发读写;
Huge Storage: 海量数据的高效存储和访问;
High Scalability & High Availability:高可扩展和高可用性
NoSQL的分类:
Key-Value,如Redis,快速查询,但是数据存储缺少结构化;
列存储,如HBase, 扩展性强,查找速度快,但是功能局限;
文档数据库,如MongoDB,数据格式灵活,查询性能不高,缺少统一的查询语法;
图形数据库,如InfoGrid,基于图的算法,但是不容易做分布式的查询;
Redis概述
Redis是一个开源,高性能的键值对数据库, 其优点包括:
异常快 :Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
支持丰富的数据类型 :Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
操作具有原子性 : 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
多实用工具 : Redis是一个多实用工具,可用于多种用例,如:
缓存;
任务队列;
网站统计;
数据过期处理;
应用排行榜;
分布式集群的Session分离;
Redis与其他键值存储系统
Redis是键值数据库系统的不同进化路线,它的值可以包含更复杂的数据类型,可在这些数据类型上定义原子操作。
Redis是一个内存数据库,但在磁盘数据库上是持久的,因此它代表了一个不同的权衡,在这种情况下,在不能大于存储器(内存)的数据集的限制下实现非常高的写和读速度。
内存数据库的另一个优点是,它与磁盘上的相同数据结构相比,复杂数据结构在内存中存储表示更容易操作。 因此,Redis可以做很少的内部复杂性。
Redis的安装和使用
Redis的安装是否简单,在Ubuntu上安装Redis,打开终端并键入以下命令即可
sudo apt-get update
sudo apt-get install redis-server
Jedis入门
Jedis是Redis官网首选的Java客户端开发包.
Jedis是Redis官网首选的Java客户端开发包
在Maven中,添加如下依赖即可使用:
redis.clients
jedis
2.9.0
jar
compile
以下是官网是上给出的示例代码,连接本地Redis,进行操作.
@Test
public void ConnectionTest(){
//1. Connecting to Redis server on localhost
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
//2. set the data in redis string
jedis.set("username", "Roxin");
//3. Get the stored data and print it
System.out.println("Stored string in redis:: "+ jedis.get("username"));
//4. Close the Redis connection;
jedis.close();
}
其中通过调用set方法来设置键值对,通过get方法获取键值对。
除此之外,Jedis还提供连接池的方式控制连接
@Test
public void ConnectionPoolTest(){
//连接池设定
JedisPoolConfig config = new JedisPoolConfig();
//设定最大连接数
config.setMaxTotal(30);
//设置最大空闲连接数
config.setMaxIdle(10);
//创建连接池
JedisPool jedisPool = new JedisPool(config, "127.0.0.1");
//获得服务资源
Jedis jedis = jedisPool.getResource();
jedis.select(1);
jedis.set("username", "Roxin By Jedis Pool");
System.out.println(jedis.get("username"));
jedis.close();
jedisPool.close();
}
Redis的数据类型
Redis中的数据类型有:
字符串(String)
列表(list)
有序集合(sorted set)
散列(hash)
集合(set)
无论哪种数据类型都需要为其设定键值Key,设置Key的注意点:
不要太长(<1024字节);
不要太短,有可读性;
统一命名规范;