redis
NoSQL
介绍Redis之前,先了解下NoSQL (Not noly SQL)不仅仅是SQL属于非关系型数据库;Redis就属于非关系型数据库;传统的Mysql ,oracle ,sql server 等都是关系型数据库
使用NoSQL主要应对以下问题,传统关系型数据库力不从心
High performance -高并发读写
Huge Storage-海量数据的高效率存储和访问
High Scalablility && High Availability 高可扩展性和高可用性
特点
易扩展 灵活的数据模型 大数据量 高性能 高可用
高性能键值对数据库 支持的键值数据类型
字符串类型 列表类型 有序集合类型 散列类型 集合类型
Redis的应用场景
缓存 任务队列 网站访问统计 数据过期处理 应用排行榜 分布式集群架构中的session分离
Redis安装
服务器没有gcc环境的 先来安装gcc redis是基于c编写的
[root@hdp-01 ~]# yum install gcc-c++ -y
wget方式 下载redis压缩包 解压以及编译
[root@hdp-01 ~]# wget http://download.redis.io/releases/redis-4.0.12.tar.gz [root@hdp-01 ~]# tar -zxvf redis-4.0.12.tar.gz [root@hdp-01 ~]# cd redis-4.0.12 [root@hdp-01 ~]# make
安装redis
[root@hdp-01 redis-4.0.12]# make PREFIX=/usr/local/redis install
redis已经安装到了/usr/local/redis下
cd回到root,我们需要把一个配置文件 复制到 /usr/local/redis下 后台启动用到
[root@hdp-01 redis-4.0.12]# cp redis.conf /usr/local/redis/
启动和关闭redis服务
启动redis就是执行redis里的bin里的redis-server命令
进入redis目录 执行
[root@hdp-01 redis-4.0.12]# cd /usr/local/redis/
[root@localhost redis]# bin/redis-server
出现这种图标,说明启动成功 但是 这种启动是前端或者前台启动 假如退出 程序就终止或者退出了
所以这种服务程序 必须后端运行 通过修改配置文件redis.conf
[root@hdp-01 redis]# vi /usr/local/redis/redis.conf
找到
no 改为 yes
加载配置文件运行
[root@localhost redis]# ./bin/redis-server ./redis.conf
通过ps -ef | grep -i redis命令来搜索redis服务
[root@hdp-01 redis]# ps -ef | grep -i redis root 26442 1 0 16:40 ? 00:00:00 ./bin/redis-server 127.0.0.1:6379 root 26447 21137 0 16:41 pts/0 00:00:00 grep --color=auto -i redis
redis基本使用
redis-cli 连接redis客户端命令
[root@hdp-01 redis]# ./bin/redis-cli 127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> get name "zhangsan"
Jedis
实际开发中 我们需要用Redis的连接工具连接Redis然后操作Redis 对于主流语言 Redis都提供了对应的客户端
Redis提供了很多客户端 官方推荐的是Jedis 托管地址:https://github.com/xetorthio/jedis
Jedis连接 HelloWorld实现
新建Maven项目 pom里加下jedis依赖
<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> </dependencies>
public class JedisTest { public static void main(String[] args) { Jedis jedis=new Jedis("192.168.88.128",6379); // 创建客户端 设置IP和端口 jedis.set("name", "lisi"); // 设置值 String value=jedis.get("name"); // 获取值 System.out.println(value); jedis.close(); // 释放连接资源 } }
测试代码 运行 报错了
配置下防火墙 开一个6379端口权限
[root@hdp-01 ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent [root@hdp-01 ~]# firewall-cmd --reload
继续运行 还是报错 连接超时 错误 我们配置下 redis配置文件
[root@hdp-01 redis]# vi /usr/local/redis/redis.conf
这里绑定了本机 我们把这个备注掉
# bind 127.0.0.1
配置完后
[root@localhost redis]# ps -ef | grep -i redis
[root@localhost redis]# kill -9 1180 [root@localhost redis]# ./bin/redis-server ./redis.conf
继续运行 又报错了
设置redis连接密码
[root@hdp-01 redis]# ./bin/redis-cli 127.0.0.1:6379> config set requirepass 123456 OK
public class JedisTest { public static void main(String[] args) { Jedis jedis=new Jedis("192.168.88.128",6379); // 创建客户端 设置IP和端口 jedis.auth("123456"); jedis.set("name", "lisi"); // 设置值 String value=jedis.get("name"); // 获取值 System.out.println(value); jedis.close(); // 释放连接资源 } }
[root@hdp-01 redis]# ./bin/redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> get name "lisi"