https://www.cnblogs.com/hunanzp/p/12304622.html
参照这篇博客
并做补充
cd 进入目录
比如: cd /usr
进入目录
cd local
进入文件夹
查看当前所有文件
ls
t
上面那篇帖子
之所以在图形界面看不到
因为没有加载conf文件
./redis-server …/redis.conf
加载redis配置文件
./redis-server …/redis.conf
退出redis
ps aux
查看进程
kill 进程号
结束进程
服务器开放redis 6379端口
开放失败打开防火墙就能开放
查看端口:
$ netstat -tlunp
(1)远程访问redis时,先将远程服务器Redis的端口(6379)放开。
$ firewall-cmd --permanent --zone=public --add-port=6379/tcp
提示:success成功
运行Java代码:Jedis jedis = new Jedis(“193.168.4.47”, 6379);报错:
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
连接超时
解决:关闭防火墙试试
$ service firewalld stop #停止防火墙
$ systemctl disable firewalld.service #禁止firewall开机启动
$ firewall-cmd --state #查看防火墙状态
再次运行Java代码测试,还是报错:Connection refused: connect 拒绝访问
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
解决:修改redis.conf文件内容:
注意:修改是redis-4.0.11目录下的redis.conf,而不是redis-4.0.11/src下的
$ vim redis.conf
注释 # bind 127.0.0.1,并将protected-mode设为no
……
#bind 127.0.0.1
……
protected-mode no
……
#bind 127.0.0.1注释掉该IP地址,表示允许网络访问。
注意:Redis默认只允许本机连接,网络访问不允许。因此注释掉该段代码,允许网络访问。
protected-mode no表示运行时报受保护异常。
重新加载redis.conf启动redis服务:
$ ./redis-server …/redis.conf
…/redis.conf是指上一级的redis.conf,是redis-4.0.11下的,否则是redis-4.0.11/src下的。
再次执行java测试,通过。
1.关系型数据库与非关系型数据库
1.1.关系型数据库
表与表之间的数据存在关系的。
1.2.非关系型数据库——NoSQL
NoSQL(Not Only SQL——不仅仅是数据库),泛指非关系型数据库(mongeDB、Redis)。
Sql server mysql oracle 关系型数据库
1.3.NoSQL的优缺点
优点:
键值对型数据库,读(查询)写性能非常好(因为数据结构简单,没有关系,数据之间无关系);
内存数据库,可以实现数据的持久化;
无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
缺点:
存储的数据缺少结构化。
1.4.为什么会出现NoSql数据库?
对数据库高并发读写的需求。
1.5.互联网“三高”
高并发
是指通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
高负载
对海量数据能够高效存储和访问需求的一种性能。
高可用
系统无中断地执行其功能的能力,代表系统的可用性程度。
1.6.为什么要使用Redis?
对数据库高并发读写的需求。每秒上万次的读写请求,硬盘IO无法承受。
对海量数据的高效率存储和访问的需求。
对数据库的高可扩展性和高可用性的需求。
2.Redis简介
2.1.概述
Redis——Remote Dictionary Server(远程数据服务)。
Redis是一个开源的、基于Key-Value方式的内存高速缓存数据库,可持久化(随时把数据备份到硬盘中),保证数据安全。
Redis也通常被称为数据结构服务器。
官 网:http://www.redis.io
中文官网:http://www.redis.cn
Redis数据库有16个数据库实例,编号是0-15。
使用Redis时,默认进入实例0。
2.2.Redis数据类型(结构)
比如:String(字符串)、Hash(哈希)、List(列表)、Sets(集合)和Sorted Sets(有序集合)等类型。
2.3.什么数据适合做缓存?
在Web开发的时候,如果有一些数据在短时间内不会发生变化,而它们还要被频繁的访问,为了提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上(或者是通过较少的计算量就可以获得该数据),该行为就称作对该数据的缓存。
该介质可以是文件、数据库、内存。
内存介质经常用于数据缓存。
2.4.Redis缓存案例
同一个select查询SQL语句,每天需要被执行查询100万次,并且每次查询获得的数据还是一样的。为了减轻数据库的负载,就把查询好的数据给缓存起来(存储在内存中),第一个用户执行Select查询时从数据库中获得数据并存储到内存中,第二个到第100万个用户查询就直接从内存中获得数据。
使用缓存减轻数据库的负载。数据库是整个网站资源的“瓶颈”。
2.5.缓存的两种形式
(1)网页缓存经常用在CMS(Content Manage System)内容管理系统中(Smarty缓存)
不发生变化的新闻信息页面适合做“页面缓存”,每个用户就从一个静态页面访问该新闻即可。
(2)数据缓存经常会用在页面的具体数据中使用
京东网站的一个页面从业务上看,数据有分类(推广商品、商品精选、普通商品),这些商品从数据读取出来,为了降低数据库负载,可以给它们设置三个数据缓存,这样独立更新、独立读取。
3.Redis安装与启动、关闭
Redis的安装有两种方式:离线安装和在线安装。
3.1.安装
3.1.1.离线安装
3.1.1.1.官网下载Redis压缩包
下载地址:http://redis.io/download,下载最新文档版本。
3.1.2.通过WinSCP等远程管理工具,将压缩包复制到Linux服务器
这里在Linux中创建目录:/dml/redis,并将压缩包复制到该目录:
$ mkdir /dml/redis
或直接在线下载,再解压。
#在线下载
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
3.1.3.解压压缩文件,并执行make对解压后的文件进行编译
在Linux中通过命令方式下载并安装:
$ cd /dml/redis
$ tar -zxvf redis-4.0.11.tar.gz
$ cd redis-4.0.11
$ make
解压:
查看解压后的目录:
进入解压目录查看:
编译:
编译时出现gcc错误:
安装gcc依赖:
$ yum install gcc
安装过程有点长,如不知道选择,全选Y。
再次编译安装:(注意大写)
$ make MALLOC=libc
编译完后,可以看到解压文件redis中会对应的src、conf等文件夹。
3.1.4.在线安装
在CentOS系统在线安装 Redis 服务端可以使用以下命令获得最近的软件包的列表:
$ sudo yum update
安装Redis服务端:
$ sudo yum install redis-server
3.2.启动Redis服务
启动Redis分为直接启动、后台进程方式启动。
3.2.1.直接启动Redis服务
进入/dml/redis/redis-4.0.11/src文件夹,找到Redis服务命令:redis-server
直接启动Redis服务:
$ ./redis-server
出现如下界面表示已启动 Redis服务:
3.2.2.设置后台进程方式启动
redis.conf是一个默认的配置文件。我们可以根据需要使用自己的配置文件。
Redis.conf文件所在位置:redis/redis-4.0.11
第一步:编辑修改redis.conf文件
$ vim redis.conf
将:daemoize no改为daemoize yes,保存并退出(选按ESC,再输入:wq!)。
文档中:databases 16表示Redis中默认的数据库有16个,但没有名字。
第二步:加载redis.conf文件重新启动Redis服务
$ ./redis-server /dml/redis/redis-4.0.11/redis.conf
3.3.启动Redis客户端
在成功启动Redis服务后,即可启动客启端。
注意:这里最好再开一个终端测试。
进入Redis-4.0.11/src目录,启动Redis客户端:
$ ./redis-cli
以上命令将打开以下终端:
127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是Redis服务端口。现在我们输入PING命令,测试是否连接成功。
127.0.0.1:6379> ping
如果现面 PONG 表示连接成功。
3.4.关闭Redis
第一步:查看redis进程
$ ps -aux | grep redis
第二步:杀死进程
$ kill -9 1693
4.Redis数据类型及操作
Redis的5种数据类型:
类型 说明
String 字符串
Hash 哈希(对象)
List 列表(List集合)
Set 集合
Sorted Set 有序集合
命令方式操作5种数据类型:
命令 说明 案例
KEYS * 查看所有键
4.1.String 字符串
一般用于存储字符串数据。最大存储512M的数据
命令 说明 案例
SET key value 设置指定 key 的值 SET uname “admin”
SET upwd “123”
GET key 获取指定 key 的值 GET uname
GETRANGE key start end 返回 key 中字符串值的子字符(截取),包后 GETRANGE uname 0 2
TYPE key 显示Key的类型 TYPE uname
INCR num 数字增,必须是数字类型的字符串,其他的字符串会报错的,相当于i++ SET n 10
INCR n
GET n
DECR mun 数字减,必须是数字类型的字符串,如果键不存在,帮你创建,初始值为0 SET n 10
DECR n
GET n
4.1.1.流量控制
这里我们将在java中使用redis-incr的特性来构建一个1分钟内只允许请求100次的控制代码,key代表在redis内存放的被控制的键值。
public static boolean flowControl(String key){
//最大允许100
int max = 100;
long total = 1L;
try {
if (jedisInstance.get(key) == null) {
//jedisInstance是Jedis连接实例,可以使单链接也可以使用链接池获取,实现方式请参考之前的blog内容
//如果redis目前没有这个key,创建并赋予0,有效时间为60s
jedisInstance.setex(key, 60, “0”);
} else {
//获取加1后的值
total = jedisInstance.incr(redisKey).long