我是
方圆
,要励志写出好博客的新手博主
希望这些知识能让我们共同进步
写好目录方便大家浏览和索引
1. Redis基础知识准备
1.1 嘛是Redis?
Redis(Remote Dictionary Server),远程字典服务,由 C语言 编写、支持网络、基于内存亦可持久化的日志型、Key-Value数据库(NoSQL)。
这里的基于内存需要大家注意一下,下文中说到为什么Redis是单线程的用得到。
1.2 NoSQL(作为了解)
NoSQL:非关系型数据库(Not only SQL),它们并不保证ACID原则。
- 分类
- 键值对存储数据库(我们的Redis就是这种)
- 列存储数据库
- 文档型数据库(我们熟悉的MongoDb)
- 图形数据库
- 特点
- 数据之间没有关系,易于扩展
- 在大数据量下,展示出较高的性能
- 不必提前设计数据库,随去随用,灵活的数据模型
1.3 那Redis可以用来做什么?
可以用于数据库、缓存和消息中间件儿等。
- RDB AOF持久化机制(扩展)
- RDB持久化是在指定时间间隔内将内存中的数据集快照写入磁盘,它也是Redis默认的持久化方式。数据恢复速度比AOF快,但是数据的一致性和完整性较差。
- AOF需要手动开启,默认是每秒将写操作到AOF文件中,持久化的数据完整性和一致性比RDB要好,但是效率差。
(预想继续了解RDB和AOF,可看下文)
Redis之RDB和AOF持久化机制详解
1.4 Redis的安装和启动服务
1.4.1 安装
- 具体安装过程不再赘述,不过有一点要提的是我在CentOS7系统的服务器上安装6.0.1版本一直报错,具体错误如下,尝试了网上的一些方法都没有解决,换成5.0.8版本就能直接安装成功,如果有人会解决这个问题,欢迎评论
make[1]: *** [server.o] Error 1
make[1]: Leaving directory `/opt/redis-6.0.1/src'
make: *** [all] Error 2
- Redis的默认安装路径是 /usr/local/bin
- 这里推荐大家在bin目录下创建myconf目录,并将配置文件redis.conf拷贝到myconf目录下
- Redis默认不是后台启动的,需要修改配置文件,如下
将daemonize no
修改为daemonize yes
1.4.2 启动服务
redis-server myconf/redis.conf
设置端口号
redis-cli -p 6379
可选步骤:检查进程
ps -ef|grep redis
关闭服务
shutdown
127.0.0.1:6379> shutdown
not connected> exit
1.5 基本命令与小知识
1.5.1 基本命令
- Select
select 3 表示切换为3号数据库
- DBSIZE
DBSIZE 查看当前数据库大小
- keys *
keys * 查看所有的key
- flushdb
flushdb 清空当前数据库
- flushall
清空所有数据库
1.5.2 必须要知道的小知识(重要)
- 默认情况下是16个数据库(在配置文件redis.conf中可查看),初始使用0号数据库
- Redis为什么是单线程的?
- 首先我们要明白,Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈取决于内存大小或网络带宽,在单线程的方案下能实现Redis,就不采用多线程。
- 除了以上一点,我们还要清楚,Redis为什么单线程会这么快?
首先我们一定要摆脱两个误区
误区一:高性能的服务器都是多线程实现的(其实不然)
误区二:多线程一定比单线程的效率高(其实更不然)
下面就让我来解释解释
Redis是基于内存操作的,单线程就是效率最高的,因为多线程的本质是经过CPU模拟出来多个线程,这样就会出现上下文切换耗时的情况,对于一个内存来说,单个线程就是效率最高的。redis 用 单个CPU 绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事儿,效率最高。
参考
该系列其他文章
Redis之数据类型,好记性不如烂笔头(二)
Redis之事务乐观锁和Jedis,谁说的Redis不能实现乐观锁的?(三)
Redis之redis.conf解析,了解了这些配置信息,才能说了解Redis(四)
Redis之主从复制和哨兵模式,差不多儿啦(五)
Redis之RDB和AOF持久化机制详解