一.NoSQL概述
1.1什么是NoSQL
NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”,是一个全新的数据库理念,泛指非关系型的数据库。
1.2为什么需要NoSQL
- 高负载
- 高并发
- 高可扩展
1.3主流NoSQL产品
- 键值存储数据库(key-value)
- 相关产品:Redis、Tekyo Cabinet/Tyrant、Voldemort、Berkeley DB
- 典型应用:内存缓存、主要用于处理大量数据的高访问负载
- 列存储数据库
- 相关产品:HBase、Riak、Cassandra
- 典型应用:分布式的文件系统
- 文档型数据库
- 相关产品:CouchDB、MongoDB
- 典型应用:Web应用
- 图形数据库
- 相关产品:Neo4J、InfoGrid
- 典型应用:社交网络
1.4NoSQL特点
在大数据存取上具备关系型数据库无法比拟的性能优势,例如:
- 易扩展:去掉关系数据库的关系型特性,数据之间无关系,这样就非常容易扩展。
- 大数据量、高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀,这就得益于它的无关系性,数据库的结构简单。
- 灵活的数据模型:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
- 高可用:NoSQL在不太影响性能的情况下,就可以方便的实现高可用的架构。
二.Redis概述
2.1Redis由来
…此处省略一万字…
2.2什么是Redis
Redis是C语言开发的一个开源的高性能键值对数据库,它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
- 字符串类型
- 散列类型(hash)
- 列表类型(list有序,不唯一)
- 集合类型(set无序,且唯一)
- 有序集合类型(set有序,且唯一)
2.3Redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)【最多使用】
- 聊天室的在线好友列表
- 任务队列(秒杀、抢购、12306等等)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒)
- 分布式集群架构中的session分离
三.Redis安装和使用
3.1Redis在Ubuntu上的安装和使用
安装redis编译的c环境,
apt-get install build-essential
将redis-3.0.0.tar.gz上传到Linux系统中
解压到/usr/local下
tar -xvf redis-3.0.0.tar.gz -C /usr/local
进入redis-3.0.0目录 使用
sudo make
命令编译redis在redis-3.0.0目录中 使用
sudo make PREFIX=/usr/local/redis install
命令安装redis到/usr/local/redis
中前端模式启动服务端:在
/usr/local/redis/bin
中执行./redis-server
启动效果如下:
启动客户端:在
/usr/local/redis/bin
中执行./redis-cli
启动后看到如上欢迎页面,但此窗口不能关闭,窗口关闭就认为redis也关闭了(类似Tomcat通过bin下的startup.bat的方式)
关闭前端启动服务器:
ctrl+c
结束进程
后端模式启动服务器解决方案:拷贝redis-3.0.0中的
redis.conf
(redis的配置文件)到安装目录redis/bin(地址随意,只要可以找到即可)中。可以通过修改配置文件配置redis后台启动,即服务器启动了但不会控制台窗口,将redis.conf文件中的daemonize从false修改成true表示后台启动。启动redis 在bin下执行命令redis-server redis.conf
启动效果如下:
关闭后端模式启动服务器:
- 方式一:先利用ps -ef | grep 6379查看端口占用的PID,再输入命令kill -9 PID号
- 方式二:执行命令
./redis-cli shutdown
关闭
如需远程连接redis,需配置redis端口6379在linux防火墙中开放
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT /etc/rc.d/init.d/iptables save
3.2使用java操作Redis(Jedis——java redis)
前提:redis端口在Linux防火墙汇总开放
流程:
- 导入jar包:jedis-2.7.0.jar和commons-pool2-2.3.jar
- new Jedis(host,port)获得连接对象(设置host和port)
- jedis.get(“username”)获得数据
- Jedis.set(“addr”,”背景”)存储数据
实例代码:
package jedis; import org.junit.Test; import redis.clients.jedis.Jedis; public class JedisTest { //测试通过java程序访问redis数据库 @Test //获得单一的jedis对象操作数据库(jedis---java redis) public void test1() { //1.获得连接对象 new Jedis(host,port); Jedis jedis = new Jedis("192.168.1.108",6379); //2.获得数据 String username = jedis.get("username"); System.out.println(username);