NoSQL
NoSQL(Not Only SQL),意思是“不仅仅是 SQL”,是一项全新的数据库理念,泛指非关系型数据库。
为什么需要 NoSQL
随着互联网 web2.0 网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应对 web2.0 网站,特别在超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服得问题,例如:
- High performance 对数据库高并发读写得需求。
- Huge Storage 对海量数据得高效率存储和访问得需求
- High Scalability && High Availability 对数据库得高可扩展性和高可用性得需求。
作为过来人,我知道这些语句不容易理解,一两句很难解释清楚,想了解得详细点,自行百度学习吧!
NoSQL 特点
在大数据存取上具备关系型数据库无法比拟的性能优势,例如:
所以,NoSQL 的非关系特性使其成为了后 Web2.0 时代的宠儿,助力大型 Web2.0 网站的再次起飞,是一项全新的数据库革命性运动。
主流 NoSQL 产品
主流 NoSQL 产品有很多,就不一一列出来了,这里我们只学习 Redis.
Redis
Redis 是用 C语言开发的一个开源的高性能键值对 (key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前位置 Redis 支持的键值数据类型有 5 种:
1. 字符串类型--String
2. 散列类型--Hash
3. 列表类型--List
4. 集合类型--Set
5. 有序集合类型--SortedSet
至于 Redis 的安装和使用,我大致的列一下步骤:
1. 安装 redis 编译的 c 环境,根目录执行 yum install gcc-c++
2. 将 redis-2.x.xx.tar.gz 上传到 Linux 系统中 ( redis 自行下载,linux 自行安装 )
3. 解压到 /usr/local 下 ,在 redis-2.x.xx.tar.gz 所在文件夹中
执行 tar -xvf redis-2.x.xx.tar.gz -C /usr/local
4. 进入 redis-2.x.xx 目录 使用 make 命令编译 redis
5. 在 redis-2.x.xx 目录中 使用 make PREFIX=/usr/local/redis install
命令安装 redis-2.x.xx 到 /usr/local/redis 中
7. 拷贝 redis-2.x.xx 中的 redis.conf 到安装目录 redis 中
8. 启动 redis 在bin下执行命令 ./redis-server ./redis.conf
9. 如需远程连接 redis,需配置 redis 端口 6379 在 linux 防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
启动后看到如下欢迎页面,但此窗口不能关闭,窗口关闭就认为 redis 也关闭了(类似 Tomcat 通过 bin 下的 startup.bat 的方式)
解决方案:
可以通过修改配置文配置 redis 后台启动。
将 redis.conf 文件中的 daemonize 从 no 修改成 yes 表示后台启动
保存后重复步骤 8 ,然后在 /bin 下再执行 ./server-cli 即可操作 redis 数据库了。
至于停止 redis 的使用,在 redis-cli 目录下执行 SHUTDOWN 命令即可!
Jedis
Jedis 集成了 redis 的一些命令操作,封装了 redis 的 java 客户端,还提供了连接池管理。
下面我们来简单学习一下,Java 连接 Redis!
准备工作:首先导入下面两个 jar 包。
获得单一的 Jedis 对象操作数据库
@Test
//获得单一的jedis对象操作数据库
public void test1(){
//1、获得连接对象
Jedis jedis = new Jedis("192.168.64.128", 6379);
//2、获得数据
String username = jedis.get("username");
System.out.println(username);
//3、存储
jedis.set("addr", "深圳1");
System.out.println(jedis.get("addr"));
}
ps:如果你之前还没配置 redis 端口 6379 在 linux 防火墙中开发,那么会抛出连接超时异常。
那应该怎么解决呢?点击这里,写的挺好的!
通过 Jedis 的 pool 获得 Jedis 连接对象
@Test
public void test2(){
//0、创建池子的配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(30);//最大闲置个数
poolConfig.setMinIdle(10);//最小闲置个数
poolConfig.setMaxTotal(50);//最大连接数
//1、创建一个redis的连接池
JedisPool pool = new JedisPool(poolConfig, "192.168.64.128", 6379);
//2、从池子中获取redis的连接资源
Jedis jedis = pool.getResource();
//3、操作数据库
jedis.set("XXXX","YYYY");
System.out.println(jedis.get("XXXX"));
//4、关闭资源
jedis.close();
pool.close();
}