1、Redis介绍及安装
1.1Redis介绍
Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3.15起,Redis的开发工作由VMware主持,从2013年5月开始,Redis的开发由Pivotal赞助。
Redis能做什么?
- 内存存储,持久化,断电即丢失,所以持久化很重要,Redis采用两种机制(RDB和AOF)
- 效率高,可以用于高速效率
- 发布订阅系统
- 地图信息分析
- 计数器等,网站浏览量
Redis特性/特点
- 多样的数据类型
- 持久化
- 集群
- 事务等
1.2 Install Redis in CentOS7
1.2.1 Install gcc
l i n u x 中的 g c c 是由 G N U 推出的一款功能强大的、性能优越的多平台编译器。 g c c 编译器能将 C 、 C + + 语言源程序和目标程序编译、连接成可执行文件。 linux中的gcc是由GNU推出的一款功能强大的、性能优越的多平台编译器。gcc编译器能将C、C++语言 源程序和目标程序编译、连接成可执行文件。 linux中的gcc是由GNU推出的一款功能强大的、性能优越的多平台编译器。gcc编译器能将C、C++语言源程序和目标程序编译、连接成可执行文件。
因为Redis依赖c++环境 所以我们需要安装c++
yum install gcc-c++
可以通过gcc -v 检查版本
gcc -v
升级版本 因为redis7.* 需要gcc高版本的支持 4个分别执行
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils #修改使用版本
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
继续查看gcc版本 升级到9.* 完成安装
1.2.2 下载与安装Redis
redis可以在windows和linux下安装使用,但是windows系统版本已经停更很长时间,不建议使用。
官网 https://redis.io/ 中文网 http://www.redis.cn/
通过工具将安装文件放在opt文件夹下:
注意:如果系统应用如java我们会安装到/usr/local下,如果使用户级别的应用,我们就放在opt下
解压文件夹:
tar -zxvf redis-7.0.5 .tar.gz
解压后进入redis文件夹查看文件:
[root@lixp ~]# cd redis-7.0.5
[root@lixp redis-7.0.5]# ls
编译:会将需要的配置帮助我们配置完成
make #注意需要在解压后的redis文件夹中执行
这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要 调用perl或python来进行编译)。如果 在 make 过程中出现 error ,就要记下错误代码(注意不仅仅 是最后一行),然后可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址)。或者系统少了 一些依赖库等,这些需要自己仔细研究错误代码。make 的作用是开始进行源代码编译,以及一些功能 的提供,这些功能由他的 Makefile 设置文件提供相关的功能。比如 make install 一般表示进行安装, make uninstall 是卸载,不加参数就是默认的进行源代码编译。make 是 Linux 开发套件里面自动化 编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用 gcc 、ld 以及运行 某些需要的程序进行编译的程序。
安装redis
make install
这条命令来进行安装(当然有些软件需要先运行 make check 或 make test来进行一些测试),这一步 一般需要你有 root 权限(因为要向系统写入文件)。
命令拓展 - 软件安装流程
1、解zhi包软件 tar zxf xxxx.tgz
2、配置 cd xxxx ./configure
3、编译 make
4、安装 make install
5、卸载 make uninstall
检查redis环境服务所在的位置
启动测试
redis-server
redis-server redis-config #后面是配置文件路径
1.2.3 配置redis
安装vim编辑器
yum -y install vim
备份文件
在redis配置文件的同级目录创建一个文件夹并且cp一个redis.conf文件到新的文件夹, 以后我们使用这个cp的文件进行操作,原生原件不变动。
#进入到redis目录下
[root@lixp redis-7.0.5]# cd /opt/redis-7.0.5
#复制一份redis.conf文件,防止源文件损坏,备份。
[root@lixp redis-7.0.5]# cp redis.conf ./redis0.conf
[root@lixp redis-7.0.5]# ll
修改后台启动
vim redis-conf
重新启动redis并查看测试
[root@lixp redis-7.0.5]# redis-server /opt/redis-6.0.6/it-sunwz/redis.conf
查看进程
ps -aux | grep redis
ps -ef | grep redis
客户端连接测试
[root@lixp redis-7.0.5]# redis-cli -h 127.0.0.1 -p 6379
[root@lixp redis-7.0.5]# redis-cli -h 127.0.0.1 -p 6379 --raw #支持中文显示
客户端IO测试
set name 张三
get name
keys *
退出客户端和结束服务
# 退出客户端
exit
# 结束服务方式1 客户端内直接输入
shutdown shutdown
# 结束服务方式2 客户端外直接输入命令
redis-cli shutdown
防火墙命令拓展
启动防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
检查防火墙状态:systemctl status firewalld
设置开机启用防火墙:systemctl enable firewalld.service
设置开机禁用防火墙:systemctl disable firewalld.service ·
关闭防火墙:systemctl stop firewalld
设置开机禁用防火墙:systemctl disable firewalld.service
1.2.4 redis开关
第一种:退出客户端之后
[root@lixp redis-7.0.5]# redis-cli shutdown
第二种:直接在客户端内(建议)
127.0.0.1:6379>shutdown
1.3 redis可视化工具安装
Redis Desktop Manager(Redis可视化工具)安装及使用
默认无法连接
配置防火墙开放端口
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --remove-port=8888/tcp --permanent
firewall-cmd --list-ports
redis服务默认有保护机制,机制规则默认是只允许当前安装redis服务的电脑访问127.0.0.1
redis默认在配置文件中有一个Ip地址 绑定的就是127.0.0.1 ,需要我们注释掉这个地址才能支持远程访问。
重新启动redis 服务
1.4 redis入门
1.4.1关于redis线程问题
redis的单线程的,那么单线程为什么还这么快?
Redis 的数据结构并不全是简单的 Key-Value,还有 list,hash 等复杂的结构。这些结构有可能会进行很细 粒度的操作,比如在很长的列表后面添加一个元素,在 hash 当中添加或者删除一个对象。这些操作可能就 需要加非常多的锁,导致的结果是同步开销大大增加。 总之,在单线程的情况下,代码更清晰,处理逻辑更简单,不用去考虑各种锁的问题,不存在加锁释放锁操 作,没有因为可能出现死锁而导致的性能消耗,不存在多进程或者多线程导致的切换而消耗 CPU。 单线程多进程的集群方案 单线程的威力实际上非常强大,每核效率也非常高。多线程自然是可以比单线程有更高的性能上限,但是在 今天的计算环境中,即使是单机多线程的上限也往往不能满足需要了,需要进一步摸索的是多服务器集群化 的方案,这些方案中多线程的技术照样是用不上的。所以单线程、多进程的集群不失为一个时髦的解决方 案。 CPU 消耗 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU。 但是如果 CPU 成为 Redis 瓶颈,或者不想让服务器其他 CPU 核闲置,那怎么办? 可以考虑多起几个 Redis 进程,Redis 是 key-value 数据库,不是关系数据库,数据之间没有约束。只要客户端分清哪些 key 放在哪个 Redis 进程上就可以了。
1.4.3 redis基础命令
数据库切换操作
127.0.0.1:6379> PING #检查连接
PONG
127.0.0.1:6379> SELECT 15
OK
127.0.0.1:6379[15]> SELECT 16 #一共16个库 0-15
(error) ERR DB index is out of range
127.0.0.1:6379[15]> SELECT 0 #默认是0 不显示索引
OK
127.0.0.1:6379>
查看当前数据库
127.0.0.1:6379> SET student zhangsan #增加一个数据
OK
127.0.0.1:6379> SET student lisi #相同key增加一个数据 会覆盖掉
OK
127.0.0.1:6379> GET student # 取值
"lisi"
127.0.0.1:6379> KEYS * # 查看所有的key
1) "list11"
2) "student"
3) "user:1:age"
4) "user:1:name"
127.0.0.1:6379>
清除数据库中的数据
flushdb 删除当前库 – 前提进入当前数据库中
flushall 删除所有库
127.0.0.1:6379> SET student zhangsan #在索引0库加信息
OK
127.0.0.1:6379> SET teacher lisi #在索引0库加信息
OK
127.0.0.1:6379> select 5 #切换索引为5的库
OK
127.0.0.1:6379[5]> SET user wangwu #在索引5库加信息
OK
127.0.0.1:6379[5]> KEYS *
1) "user"
127.0.0.1:6379[5]> FLUSHDB #清除当前库
OK
127.0.0.1:6379[5]> keys *
(empty array)
127.0.0.1:6379[5]> SELECT 0
OK
127.0.0.1:6379> KEYS *
4.2.4 设置过期时间
4.2.5 查看key类型
4.2.5 查看key是否存在
5. redis数据类型
redis存在5种基本数据类型和三种特殊类型
1) "teacher"
2) "student"
127.0.0.1:6379> SELECT 5
OK
127.0.0.1:6379[5]> FLUSHALL #清空所有的库信息
OK
127.0.0.1:6379[5]> SELECT 0
OK
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379>
设置过期时间
127.0.0.1:6379> set student jiazong
OK
127.0.0.1:6379> EXPIRE student 30 #设置过期 秒数
(integer) 1
127.0.0.1:6379> TTL student
(integer) 18
127.0.0.1:6379> TTL student
(integer) 16
127.0.0.1:6379> TTL student #查看过期时间
(integer) 14
127.0.0.1:6379> TTL student
(integer) 7
127.0.0.1:6379> TTL student
(integer) -2
127.0.0.1:6379> get student
(nil)
127.0.0.1:6379>
查看key类型
type key
查看key是否存在
EXISTS key
(integer) 1
127.0.0.1:6379> TTL student
(integer) 18
127.0.0.1:6379> TTL student
(integer) 16
127.0.0.1:6379> TTL student #查看过期时间
(integer) 14
127.0.0.1:6379> TTL student
(integer) 7
127.0.0.1:6379> TTL student
(integer) -2
127.0.0.1:6379> get student
(nil)
127.0.0.1:6379>
查看key类型
```shell
type key
查看key是否存在
EXISTS key