1. Redis简介
1.1 NoSQL的定义
学习Redis之前,我们先来了解一下NoSQL,相信大家基本上都有接触过MySQL,它是一种典型的关系型数据库,在我们实际应用过程中也是很频繁的。既然存在像MySQL这种类型的关系数据库,那么也就存在非关系数据库,没错,NoSQL就是非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的一个良好的补充。在实际应用开发过程中,NoSQL是一种用来解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案。了解更多请点击这里
1.2 NoSQL数据的基本分类
键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 数据模型: 一系列键值对 优势: 快速查询 劣势: 存储的数据缺少结构化列存储数据库 相关产品:Cassandra, HBase, Riak 典型应用:分布式的文件系统 数据模型:以列簇式存储,将同一列数据存在一起 优势:查找速度快,可扩展性强,更容易进行分布式扩展 劣势:功能相对局限文档型数据库 相关产品:CouchDB、MongoDB 典型应用:Web应用(与Key-Value类似,Value是结构化的) 数据模型: 一系列键值对 优势:数据结构要求不严格 劣势: 查询性能不高,而且缺乏统一的查询语法图形(Graph)数据库 相关数据库:Neo4J、InfoGrid、Infinite Graph 典型应用:社交网络 数据模型:图结构 优势:利用图结构相关算法。 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
1.3 走进Redis
Redis是一种用C语言开发的一个开源的高性能的键值对数据库,它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型包括字符串类型、散列类型、列表类型、集合类型、有序集合类型。了解更多请点击这里 应用常景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)分布式集群架构中的session分离。聊天室的在线好友列表。任务队列。(秒杀、抢购、12306等等)应用排行榜。网站访问统计。数据过期处理(可以精确到毫秒)
2. Redis的下载与安装
Redis的官网网址链接:http://redis.io/ 下载地址链接:https://redis.io/download
本文以在centos6.8的环境下安装Redis3.0.0进行讲解说明 在官网上下载redis-3.0.0.tar.gz安装包后,拷贝到Linux系统中,再使用# tar -zxf redis-3.0.0.tar.gz 解压到本地目录。由于Redis是由C语言开发的,在Linux系统运行需要先进行编译,编译redis源码的命令行 #cd redis-3.0.0(首先切换到redis-3.0.0源码文件夹,再进行编译) #make Redis的启动
启动方式1(前端启动方式): 切换到redis的文件下的bin目录下 #cd usr/local/redis/bin(注:此路径为博主设置的路径,根据自己的实际情况调整) #./redis-server 启动方式2(后端启动方式): (1)需要首先将redis源码包中的配置文件redis.conf复制到/usr/local/redis/bin下; (2)使用vim指令修改刚复制的redis.conf文件,将其中的daemonize由no改为yes, #vim redis.conf (3)修改完成后,启动服务 #./redis-server redis.conf其他:使用Redis的客户端工具 下载链接: 链接:https://pan.baidu.com/s/1BZwPckLDAh8V8tf2f8S6dw 提取码:m3ja 至于安装过程基本上就是一路next了 安装成功后的界面如下: 这就是redis的客户端操作界面,使用方法也简单,和Navicat差不多。 首次使用客户端工具连接centos中的redis服务时,可能出现连接超时,或者是拒绝连接,处理方法可以参考博主的另一篇博客解决使用远程连接工具连接redis时,出现连接超时的方法
3.使用java语言调用redis
3.1认知jedis
jedis是集成了redis的一些命令操作,封装了redis的java客户端。下面介绍在java中常见的使用方式。
3.2jedis的使用
单实例使用的代码实现
@Test
public void test1(){
Jedis jedis
= new Jedis("192.168.12.128", 6379);
jedis
.select(3);
jedis
.set("welcome","欢迎来到智能系统优化实验室");
jedis
.hset("user:1001","username","cc");
jedis
.hset("user:1001","age","22");
jedis
.hset("user:1001","gender","男");
jedis
.lpush("FootballTeamNames","日本","韩国","英国");
jedis
.sadd("NBA","勇士","骑士");
jedis
.zadd("english:scoreboard",90,"zhangsan");
jedis
.zadd("english:scoreboard",91,"lisi");
jedis
.zadd("english:scoreboard",92,"wangwu");
System
.out
.println(jedis
.get("welcome"));
jedis
.close();
}
通过连接池的使用方式
@Test
public void testJedisPool() {
JedisPool jedisPool
= new JedisPool("192.168.12.128", 6379);
Jedis jedis
= jedisPool
.getResource();
jedis
.select(1);
String result
= jedis
.get("welcome");
System
.out
.println(result
);
jedis
.close();
jedisPool
.close();
}