一、认识Redis
1、NoSQL概述
认识Redis之前应该先了解下NoSQL
(1)NoSQL=Not only SQL(是读“N”“o”SQL,而不是”NO”SQL),是一种非关系型数据库。
(2)为什么需要用到NoSQL?
- High Performance:高并发读写
- High Storage: 高效率的数据存储与访问
- High Scalability && High Availability :高扩展性与高可用性
(3)NoSQL的产品:CouchDB、HBase、Redis、mongoDB……
(4)NoSQL数据库的四大分类:
- 键值存储:典型的为Redis,但是数据缺少结构化
- 列存储:HBase、Riak等
- 文档数据库:mongoDB,查询效率低
- 图形数据库:InfoGrid、Neo4j,是图结构
2、Redis概述
(1)Redis是由C语言开发的开源高效能的键值对数据库,提供了很多的数据类型(字符串、列表、散列、有序集合、集合类型)。
(2)应用场景
- 数据缓存
- 任务队列(秒杀、抢购等现实应用)
- 数据过期处理
- 网站访问统计
- 分布式cluster集群架构中session分离
二、Redis安装与配置
1、准备工作
- 搭建环境:VMWare虚拟机+CentOS的Linux系统(建议Redis搭建在Linux服务器中)
- SSH客户端:Secure CRT
- 上传服务器文件客户端:FileZilla
- CentOS需要gcc环境:编译Redis C语言的源文件的环境
2、安装过程
这是需要已经安装好了虚拟机,并且能成功装上能够CentOS,能够与本机Windos分享网络,即CentOS能联网。但是这里介绍的是断网下的Redis安装。
(1)下载redis压缩包官网Download Redis:redis-xxx.tar.gz
选择稳定Stable版本
(2)CentOS配置Redis
1、首先查看CentOS服务器主机的IP地址,用来连接服务器。输入命令:ip add
得到IP地址192.168.42.128
接下来登录服务器传文件。利用FileZilla上传Redis压缩包到root目录下:打开FileZilla
2、 连接服务器192.168.42.128,输入Linux服务器登录帐号与密码
登录之后输入解压tar压缩包命令
tar zxvf redis-4.0.2.tar.gz
之后可以在root目录下查看解压后的文件redis-4.0.2
输入命令进入redis-4.0.2目录下并编译make
cd redis-4.0.2/
make
之后继续在该目录下输入命令安装,将安装的文件放到目录/usr/local/redis下
make install PREFIX=/usr/local/redis
3、修改redis.conf配置文件:进入目录/usr/local/redis/bin
cd /usr/local/redis/bin
然后修改redis.conf文件,先将redis.conf配置文件copy到目录/usr/local/redis下
cd redis-4.0.2/
cp redis.conf /usr/local/redis
之后进入/usr/local/redis目录下修改conf
cd /usr/local/redis
vi redis.conf
进入vim 修改redis.conf中的参数,daemonize参数为yes –>按Esc->冒号:wq–>保存退出
4、启动redis服务器
进入bin目录
cd /usr/local/redis/bin
加载配置文件启动redis服务器
./redis-server redis.conf
之后查看redis是否启动成功
ps aux|grep redis
出现如下的信息就说明redis启动成功了
其中4281是我的redis服务器进程号,6379是默认的端口号
5、启动redis客户端,测试redis
进入bin目录
cd /usr/local/redis/bin
启动客户端
./redis-cli
就会出现127.0.0.1:6379
,之后测试redis功能:
三、Jedis:Java环境下连接Redis
1、下载两个jar包:我用的Eclipse+Maven
关于具体的Maven如何导包可以参考Maven下导入jar包的几种方式
2、编写代码
(1)单实例的测试
public class JedisDemo {
/**
* 第一种简单的方式: 单实例的测试
* @author Lijian
*/
@Test
public void test1(){
//1、设置IP地址与端口
Jedis jedis = new Jedis("192.168.42.128",6379);
//2、保存数据
jedis.set("name","Lijian");
//3、获取数据
System.out.println( jedis.get("name"));
//4、关闭资源
jedis.close();
}
}
最后测试的结果会出错,显示如下所示:连接超时
这是因为Linux服务器未对端口6379开放,要进行下面的配置iptables防火墙命令才可以。
vim /etc/sysconfig/iptables
但是Centos6与7都没有iptables。如下图
这时候就会需要再进一步设置。
请参考解决CentOS没有iptables的问题,即可解决此问题
输入命令
vim /etc/sysconfig/iptables
在插入状态下移动到端口为22(22端口已经开放)的行,然后按yy进行复制,p为粘贴,修改22为6379,或者复制下列语句
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
之后重启iptables.service,设置为开机启动
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
但是最后测试单实例时,仍然出现如下如何的错误
DENIED Redis is running in protected mode because protected mode is enabled........
这是因为redis.conf配置中的protect-mode保护模式为yes,我们可以关掉保护模式为no
进入redis客户端的目录
/usr/local/redis/bin/redis-cli
开启客户端redis-cli
config set protected-mode "no"
最后运行成功
(2)测试连接池连接方式
@Test
public void test2(){
//1、获得连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
//2、设置最大连接数:
config.setMaxTotal(100);
//3、设置最大空闲连接数
config.setMaxIdle(100);
//4、获得连接池
JedisPool jedisPool = new JedisPool(config, "192.168.42.128",6379);
//5、获得核心对象
Jedis jedis =null;
try{
//6、通过连接池获得连接
jedis=jedisPool.getResource();
//7、设置数据
jedis.set("student", "Xiaoming");
String value = jedis.get("student");
System.out.println(value);
}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
jedis.close();
}
if(jedisPool !=null){
jedisPool.close();
}
}
}
最后运行成功
3、配置过程中注意的事项
(1)redis.conf中的bind参数:默认为
bind 127.0.0.1
若改为bind 0.0.0.0,就可以从其他的客户端访问服务器,不光只是本机。
(2)Linux系统默认的防火墙是firewall,而不是iptables
参考资料:
https://www.cnblogs.com/nick-huang/p/5762565.html
http://www.jb51.net/article/101576.htm