初识redis
Redis 是一种基于键值对(key-value) 的 NoSQL 的数据库,它与很多键值数据库不同, Redis 中的值可以是 string(字符串) 、hash(哈希)、list(链表)、set(集合)、bitmap(位图)、Zset(有序集合)、GEO(地理位置信息定位) 等多种Value 。 因此 Redis 可以满足很多的应用场景,并且 Redis 还会将所有数据存放在 内存 中,大大加速了数据读写的速度。并且 Redis 会将所有内存中数据利用 快照 和 日志 的形式存放在硬盘上面,保证内存中的数据不会因为意外丢失。
redis特性
-
速度快
Redis执行命令的速度非常快,那为什么 Redis 执行命令的速度这么快呢?大概分为四点:
1.1 数据存储在内存中,没有磁盘级 I / O
1.2 **高效的数据结构,通过动态编码和紧凑存储优化内存和计算 **
1.3 单线程加上 I / O 多路复用,,避免了多线程上下文的切换以及多线程锁的竞争,并且通过非阻塞 I / O 多路复用,使用 epoll / kqueue 技术监听多个客户端连接,通过事件驱动模型处理请求,单线程就可管理多个链接,减少了资源消耗
1.4 智能内存管理,通过分配器和淘汰策略平衡性能与资源
-
基于键值对的结构化数据结构处理器
-
丰富的功能
3.1 提供了键过期功能
3.2 提供了发布订阅功能
3.3 支持lua脚本,可以利用Lua创造出新的Redis 命令
3.4 提供了简单的事务功能,在一定程度上保证了事务的特性
3.5 提供了流水线功能,客户端能够将一批命令一次性传到Redis(类似于Linux中的管道),减少了网络开销
4.简单稳定
5.客户端语言多 ,支持 Redis 的客户端语言非常多,比如:C、C++、JAVA、PHP、Python、Nodejs等。
6.持久化
Redis 提供了两种持久化方式:RDB (快照) 和 AOF (日志),可以使用上面两种方式将内存数据保存在磁盘中。
6.1 RDB 是通过定期生成数据集快照来保存数据的持久化方式。它会在指定的时间间隔内将内存中的数据集快照写入磁盘。具体过程是通过fork一个子进程,将数据集写入临时文件,写入成功后再替换之前的文件。
6.2 AOF 是通过记录所有写操作日志来保存数据的持久化方式。每当Redis执行一个改变数据集的命令时,这个命令就会被追加到AOF文件的末尾。AOF还支持后台重写,以减少文件大小。
7.主从复制
Redis 提供了主从复制功能,提供了多个相同数据的 Redis 副本。
8.高可用和分布式
Redis 提供了高可用的Redis 哨兵,保证了Redis 节点的故障发现和故障自动转移。也提供了Redis 集群,提供了高可用、读写和容量的扩展性。
redis重要文件及作用
这里展示的是通过 ATP包管理器 安装的 redis 下的可执行文件以及脚本的路径,通过 源码 安装的可能有所不同(通常在/usr/local/reids/bin
中)
/usr/bin/redis-benchmark
,其用于对 Redis 做性能基准测试的工具/usr/bin/redis-check-aof
,用于修复 AOF 文件所用的工具/usr/bin/redis-check-rdb
,用于修复 RDB 文件所用的工具/usr/bin/redis-cli
,用于 Redis 的客户端程序/usr/bin/redis-sentinel
, Redis 的哨兵程序/usr/bin/redis-server
,其是 Redis 的服务器程序,/usr/libexec/redis-shutdown
,停止 Redis 服务的脚本
redis 配置文件
/etc/redis-sentinel.config
是Redis Sentinel的高可用服务器配置文件,用于监控主从节点并在主节点故障时自动故障转移。
/etx/redis.config
是redis的配置文件
redis持久化文件存储目录
/var/lib//redis/
是存储 Redis 持久化生产的 AOF 和 RDB 文件的目录。
redis日志文件目录
/var/log/redis
会保存 Redis 运行产生的日志文件。
redis命令行客户端
我们可以通过如下两种方式来连接 redis 服务器.
redis-cli -h {host} -p {port}
root@host \~\]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379\> ping PONG 127.0.0.1:6379\> set key hello OK 127.0.0.1:6379\> get key "hello"
redis-cli -h {host} -p {port} {command}
root@host \~\]# redis-cli -h 127.0.0.1 -p 6379 ping PONG \[root@host \~\]# redis-cli -h 127.0.0.1 -p 6379 set key hello OK \[root@host \~\]# redis-cli -h 127.0.0.1 -p 6379 get key "hello"
(注意:这里由于我们连接的是本机上的 redis 服务 127.0.0.1,端口号使用的也是默认的端口 6379 ,所以这里其是可以省略 ip 地址和 端口号 )
