Redis6课件.docx
Nosql
泛指非关系型的数据库,作为关系型数据库的补充,不依赖业务逻辑方式存储,而以简单的key-value模式存储。应对基于海量用户和海量数据前提下的数据处理问题。主要用于解决性能问题
特征:
可扩容,可伸缩 ; 大数据量下高性能 ;灵活的数据模型 ; 高可用
Nosql不适用于需要事务支持;基于sql的结构化查询存储的关系
redis
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,数据都缓存在内存中,支持持久化,主要用作备份恢复
特征:
- 数据间没有必然的关联关系
2. 内部采用单线程机制进行工作
3. 高性能
4. 多数据类型支持(string、list、hash、set、sorted_set)
5. 持久化支持。可以进行数据灾难恢复
redis的操作是原子性的:原子操作是指不会被线程调度机制打断的操作;操作开始后就运行到结束。redis单命令原子性得益于它的单线程
Redis相关知识
Redis是单线程搭配多路IO复用技术:多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态
//看专栏补上理论知识点
安装
安装C 语言的编译环境
yum install centos-release-scl scl-utils-buildyum install -y devtoolset-8-toolchainscl enable devtoolset-8 bash//测试 gcc版本gcc --version

解压安装包
//解压安装包tar -zxvf redis-6.2.1.tar.gz//进入安装目录cd redis-6.2.1//编译成c文件make若没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件//清除后再次make编译make distclean//安装编译好的东西make install默认安装到 /usr/local/bin 目录下
前台启动
出现redis服务器图标
redis-server
后台启动
备份redis.conf到其他目录
cd redis-6.2.1//复制conf文件cp redis.conf /etc/redis.conf//修改redis.conf文件将里面的daemonize 改为yes 保存vi redis.conf#启动rediscd /usr/local/binredis-server /etc/redis.conf//查看redis进程ps -ef | grep redis
连接与关闭
#客户端连接redisredis-cli//多个端口可以redis-cli -p 6379 //6379是端口号#关闭shutdown//单实例关闭redis-cli shutdown
Redis为什么快
- 完全基于内存,非常快速。数据存在内存中
- 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU, 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
- 使用多路I/O 复用模型, 非阻塞IO
Redis为什么会比MySQL快
- Redis是基于内存存储的,MySQL是基于磁盘存储的
- Redis存储的是k-v格式的数据。时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn),对数阶
- MySQL数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。
- Redis是单线程的多路复用IO,单线程避免了线程切换的开销,而多路复用IO避免了IO等待的开销,在多核处理器下提高处理器的使用效率可以对数据进行分区,然后每个处理器处理不同的数据。
