Redis基础及基础命令
1.Redis简介
Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。
Redis 比其他 key-value 缓存产品有以下三个特点:
Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
Redis 支持主从复制,即 master-slave 模式的数据备份。
2.Redis基础
2.1关系型数据库和非关系型数据库
关系型数据库:
关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。主要代表:SQL Server,Oracle,Mysql,PostgreSQL。
容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解;使用方便,通用的sql语句使得操作关系型数据库非常方便;易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率。
对于网站的并发量高,往往达到每秒上万次的请求,对于传统关系型数据库来说,硬盘I/o是一个很大的挑战。在基于web的结构中,数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。
非关系型数据库:
NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。
NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获
用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可。
非关系数据库大部分是开源的,实现比较简单,大都是针对一些特性的应用需求出现的。根据结构化方法和应用场景的不同,分为以下几类。
(1)面向高性能并发读写的key-value数据库
主要特点是具有极高的并发读写性能,例如Redis、Tokyo Cabint等。
(2)面向海量数据访问的面向文档数据库
特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.
(3)面向可拓展的分布式数据库
解决的主要问题是传统数据库的扩展性上的缺陷。
但是由于Nosql约束少,所以也不能够像sql那样提供where字段属性的查询。因此适合存储较为简单的数据。有一些不能够持久化数据,所以需要和关系型数据库结合。
2.2关系型数据库和非关系型数据库的区别
(1)数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。与其相反,非
关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因·
素。
(2)扩展方式不同
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算
机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向
扩展的上限。而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
(3)对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回
滚事务。虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
2.3Redis特点
高性能: Redis 将所有数据集存储在内存中,可以在入门级 Linux 机器中每秒写(SET)11 万次,读(GET)8.1 万次。Redis 支持 Pipelining 命令,可一次发送多条命令来提高吞吐率,减
少通信延迟。
持久化:当所有数据都存在于内存中时,可以根据自上次保存以来经过的时间和/或更新次数,使用灵活的策略将更改异步保存在磁盘上。Redis 支持仅附加文件(AOF)持久化模式。
数据结构: Redis 支持各种类型的数据结构,例如字符串、散列、集合、列表、带有范围查询的有序集、位图、超级日志和带有半径查询的地理空间索引。
原子操作:处理不同数据类型的 Redis 操作是原子操作,因此可以安全地 SET 或 INCR 键,添加和删除集合中的元素等。
支持的语言: Redis 支持许多语言,如 C、C++、Erlang、Go、Haskell、Java、JavaScript(Node.js)、Lua、Objective-C、Perl、PHP、Python、R、Ruby、Rust、Scala、Smalltalk
等。
主/从复制: Redis 遵循非常简单快速的主/从复制。配置文件中只需要一行来设置它,而 Slave 在 Amazon EC2 实例上完成 10 MM key 集的初始同步只需要 21 秒。
分片: Redis 支持分片。与其他键值存储一样,跨多个 Redis 实例分发数据集非常容易。
可移植: Redis 是用 C 编写的,适用于大多数 POSIX 系统,如 Linux、BSD、Mac OS X、Solaris 等。
3.安装部署
systemctl stop firewalld
#关闭防火墙
setenforce 0
#关闭SElinux
yum install gcc gcc-c++ make -y
#安装依赖包及工具
cd /opt
#切换到opt目录下
tar xf redis-5.0.7.tar.gz
#解压redis安装包
cd redis-5.0.7/
make && make prefix=/usr/local/redis install
#直接执行make与make install命令进行安装
cd utils/
#切换到utils目录下
./install_server.sh
#执行目录下install_server.sh脚本
Welcome to the redis service installer
This script will help you easily set up a running redis server
............
#然后一路回车
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server
#需要手动修改为 /usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
#创建软连接到/usr/local/bin下,便于系统识别。
ss -natp |grep redis
#查看下进程是否开启
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.74.74
#第70行添加IP地址
port 6379
#第93行默认端口号
daemonize yes
#第137行启用守护进程
pidfile /var/run/redis_6379.pid
#第159行指定pid文件
loglevel notice
#第167行日志级别
logfile /var/log/redis_6379.log
#第172行日志文件位置
4.Redis命令行工具
redis-server 用于启动 Redis 的工具
redis-benchmark 用于检测 Redis 在本机的运行效率
redis-check-aof 修复 AOF 持久化文件
redis-check-rdb 修复 RDB 持久化文件
redis-cli Redis命令行工具
4.1redis-cli 命令行工具
语法:redis-cli -h host -p port -a password
-h 指定远程主机
-p 指定 Redis 服务的端口号
-a 指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
4.2redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效的测试 Redis 服务的性
能。 基本的测试语法为
redis-benchmark [选项] [选项值]
-h: 指定服务器主机名。
-p: 指定服务器端口。
-s: 指定服务器 socket。
-c: 指定并发连接数。
-n: 指定请求数。
-d: 以字节的形式指定 SET/GET 值的数据大小。
-k: 1=keep alive 0=reconnect 。
-r: SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P: 通过管道传输<numreq>请求。
-q: 强制退出 redis。 仅显示 query/sec 值。
--csv: 以 CSV 格式输出。
-l: 生成循环, 永久执行测试。
-t: 仅运行以逗号分隔的测试命令列表。
-I: Idle 模式。 仅打开 N 个 idle 连接并等待。
redis-benchmark -h 192.168.224.101 -p 6379 -c 100 -n 100000
#向 IP 地址为 192.168.224.101端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.224.101 -p 6379 -q -d 100
#测试存取大小为 100 字节的数据包的性能
5.Redis常用命令
5.1set/get 存放/获取数据
set 存放数据,命令格式为 set key value
get 获取数据,命令格式为 get key
5.2keys 取值
keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
keys *
#看所有
keys v*
#看所有以v开头的
keys v?
#看以v开头的且后面只有一个字节
keys v??
#看以v开头的且后面只有两个字节
5.3del 删除key
del 命令可以删除当前数据库的指定 key。
del k1
#删除k1
5.4exists 判断值是否存在
exists 命令可以判断键值是否存在
exists v1
#查看v1是否存在
(integer) 1
#存在
exists k1
#查看k1是否存在
(integer) 0
#不存在
5.5type 获取值的类型
type 命令可以获取 key 对应的 value 值类型
type v1
#查看v1类型
5.6rename 重命名(覆盖)
rename 命令是对已有 key 进行重命名。(覆盖)
命令格式:rename 源key 目标key
5.7renamenx 重命名(不覆盖)
renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)
命令格式:renamenx 源key 目标key
5.8dbsize 查看库中key的数量
dbsize 命令的作用是查看当前数据库中 key 的数目。
5.9设置密码
使用config set requirepass password命令设置密码
使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)
config set requirepass 123456
#修改密码为123456
auth 123456
#验证密码
5.10move移动数据
Redis 的多数据库在一定程度上是相对独立的, 例如在数据库 0 上面存放的 k1 的数据,
在其它的 1-15 的数据库上是无法查看到的。
move 键名 数据库编号
move v1 1
#将v1移到1库
select 1
#切换到1库
keys *
6.总结
redis是非关系型数据库,redis在内存上运行并支持持久化,客户访问数据不需要读取硬盘,所以速度非常快,利用键值对的存储形式,redis服务器程序是单进程模式。
在读写分离的MySQL数据库中,把经常访问的数据存储在redis非关系型数据库中,提升访问速度。