redis
文章目录
1. 概述
什么是redis?
- Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助
- 它支持存储的 value 类型相对更多,包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合) 和 Hash(哈希),而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。Redis 可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步
- Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上
redis有什么优点?
- 速度快,因为数据存在内存中,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB
- 支持丰富数据类型,支持 string,list,set,sorted set,hash等
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis的回收策略:
- olatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据
为什么 Redis 是单线程的?
Redis 的数据存储在内存中,如果数据全都在内存里,单线程的去操作就是效率最高的。
为什么呢?因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。因为上下文切换所花费的时间远大于直接从内存中读取数据所花费的时间。
Redis 用单个 CPU 绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案。
这里我们一直在强调的单线程,只是在处理我们的网络请求的时候只有一个线程来处理,一个正式的 Redis Server 运行的时候肯定是不止一个线程的,例如 Redis 进行持久化的时候会以子进程或者子线程的方式执行。
2. 安装redis
port 6379 #端口可修改为非常用端口
daemonize yes #配置为守护进程方式 后台启动, 默认为 no
logfile "redis-6379.log" #日志文件名称,添加端口号方便标识
dbfilename dump-6379.rdb #rdb文件名,添加端口号方便标识
dir /data/redis/ #数据文件目录
requirepass 123456 #配置连接密码, 默认无密码
pidfile /var/run/redis-6379.pid #指定pid文件,默认文件无端口号,不好区分
appendonly yes #打开aof
# 注释 去除默认的rdb, 防止大量写入时性能消耗
# save 3600 1
# save 300 100
# save 60 10000
官网地址 https://redis.io 根据实际情况下载当前最稳定的版本
//下载依赖包
[root@redis ~]# ls
anaconda-ks.cfg redis-6.2.4.tar.gz
[root@redis ~]# yum -y install gcc gcc-c++ make
//解压包
[root@redis ~]# tar xf redis-6.2.4.tar.gz
[root@redis ~]# ls
anaconda-ks.cfg redis-6.2.4 redis-6.2.4.tar.gz
//make进行编译
[root@redis ~]# cd redis-6.2.4
[root@redis redis-6.2.4]# ls
00-RELEASENOTES CONTRIBUTING INSTALL README.md runtest-cluster sentinel.conf TLS.md
BUGS COPYING Makefile redis.conf runtest-moduleapi src utils
CONDUCT deps MANIFESTO runtest runtest-sentinel tests
[root@redis redis-6.2.4]# make
Hint: It's a good idea to run 'make test' ;)

最低0.47元/天 解锁文章
937

被折叠的 条评论
为什么被折叠?



