什么是Redis
redis是一款基于C语言的开源的基于键值的存储服务系统它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。

Redis的创始人是意大利人Salvatore Sanfilippo,他的网名是antirez,我们可以通过https://github.com/antirez来访问他的主页。
Redis的优势
Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。当然这是官方声明的,但是实际应用达到w级是肯定没问题的。
因此redis的性能非常好,而且可以支持多种数据结构和持久化(RDB实现方式和AOF实现方式)。
redis可以支持多种编程语言,在java,php,python都有实现。
redis可谓短小精悍,redis5.0的代码也就只有5w行,除去实现分布式的代码,它仅仅只有23000行代码,但是redis提供的功能非常丰富,比如发布订阅,Lua脚本,事务等。
redis提供主从复制,这为后面实现高并发和高可用打下了基础。
Redis典型应用场景
- 缓存系统
- 计数器
- 消息队列系统
- 排行榜
- 社交网络
- 实时系统
Redis的安装和简单运行
- 下载
1 | wget http://download.redis.io/releases/redis-5.0.3.tar.gz |
可能会遇到DNS解析的问题,这时候要去更改
/etc/resolv.conf
1 | vim /etc/resolv.conf |
- 解压
1 | tar xzf redis-5.0.3.tar.gz |
- 创建文件并编译
1 | cd redis-5.0.3 |
- 进入目录并运行
1 | src/redis-server |
- 修改问题和警告
这时候启动redis的时候难免会出现警告,首先肯定是关于配置文件的问题,redis建议你启动的时候附带配置文件路径
如:
1 | src/redis-server redis.conf |
我们需要将redis以守护进程的方式启动以避免关闭命令行是redis不退出,我们只需要修改redis.conf文件,设置daemonize为yes就行。
我们运行之后会发现我们无法再进行其他操作了,这时候我们需要启动的时候添加一个&
1 | src/redis-server redis.conf & |
你可能还会遇到以下问题
- WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
大概意思是你的tcp设置为128对于这个环境来说太小了,redis建议你设置为511
1 | echo 511 > /proc/sys/net/core/somaxconn |
- you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis.
解决办法:
1 | echo never > /sys/kernel/mm/transparent_hugepage/enabled |
- overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
按照提示将vm.overcommit_memory = 1加入到/etc/sysctl.conf中并执行命令sysctl vm.overcommit_memory=1就好了
简单的设置值和取值
命令:
set key value get key