1. 付磊和张益军两位大咖写的葵花宝典(Redis开发和运维)学习笔记。

一、初识Redis

1、redis简介

Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。

2、Redis特性

1.速度快

正常情况下,Redis执行命令的速度非常快,官方给出的数字是读写性能可以达到10万/秒

  • 分析原因:

    • 1、数据存放在内存;
    • 2、C语言实现;
    • 3、单线程;
    • 4、源代码精打细磨
  • 谷歌公司给出的各层级硬件执行速度

2.基于键值对的数据结构服务器

  • 提供5种数据结构:

字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)HyperLogLog两种神奇的“数据结构”,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中加入有关GEO(地理信息定位)的功能。

3.丰富的功能

  • 提供了键过期功能,可以用来实现缓存
  • 提供了发布订阅功能,可以用来实现消息系统
  • 支持Lua脚本功能,可以利用Lua创造出新的Redis命令
  • 提供了简单的事务功能,能在一定程度上保证事务特性
  • 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销

4.简单稳定

  • Redis的源码很少,早期版本的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行左右
  • Redis使用单线程模型
  • Redis不依赖于操作系统中的类库

5.客户端语言多

几乎涵盖了主流的编程语言,例如Java、PHP、Python、C、C++、Nodejs等

6.持久化

提供了两种持久化方式:RDBAOF,即可以用两种策略将内存的数据保存到硬盘中

7.主从复制

Redis提供了复制功能,实现了多个相同数据的Redis副本

8.高可用和分布式

Redis从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis节点的故障发现和故障自动转移

3、Redis使用场景

3.1 redis擅长

  • 1.缓存
    redis提供键值过期时间设置,并提供了灵活的控制最大内存和内存溢出后的淘汰策略。

  • 2.排行榜系统
    redis提供了列表和有序集合数据结构,合理使用这些数据结构可以构建各种排行,如热度排行,发布时间排行

  • 3计数器应用
    视频网站播放数,电商网站浏览量,做加1的操作,对关系数据库的性能是一种挑战,redis天然支持计数功能性能很好。

  • 4.社交网络
    赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。

  • 5.消息队列系统
    Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足

3.2 redis不擅长

是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

4、Redis安装

使用最新版本就是最佳实践

4.1 安装

  • 1)下载Redis指定版本的源码压缩包到当前目录

$ wget http://download.redis.io/releases/redis-4.0.10.tar.gz

  • 2)解压缩Redis源码压缩包

tar zxvf redis-4.0.10.tar.gz -C /usr/local/

  • 3)建立一个redis目录的软连接,指向redis-4.0

ln -s /usr/local/redis-4.0.10/ /usr/local/redis

  • 4)进入redis目录

cd /usr/local/redis

  • 5)编译(编译之前确保操作系统已经安装gcc)

make

  • 6)安装

make install

  • 7)查看安装版本

redis-server --version

  • 注意:

    第一,第3步中建立了一个redis目录的软链接,这样做是为了不把redis目录固定在指定版本上,有利于Redis未来版本升级。

    第二,第6步中的安装是将Redis的相关运行文件放到/usr/local/bin/下,这样就可以在任意目录下执行Redis的命令。

4.2 简单配置

Redis可执行文件说明

可执行文件 作用
redis-server redis服务器
redis-cli redis命令客户端
redis-benchmark redis性能压测工具
redis-check-rdb RDB文件检查工具
redis-check-aof AOF文件检查工具
redis-sentinel 高可用安装部署

4.3 启动redis

有三种方法启动Redis:默认配置、运行配置、配置文件启动。

  • 1、默认配置

这种方法会使用Redis的默认配置来启动,下面就是redis-server执行后输出的相关日志

  1. [root@node02 redis]# redis-server
  2. 23099:C 21 Aug 10:50:02.395 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  3. 23099:C 21 Aug 10:50:02.396 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=23099, just started
  4. 23099:C 21 Aug 10:50:02.396 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
  5. 23099:M 21 Aug 10:50:02.397 * Increased maximum number of open files to 10032 (it was originally set to 1024).
  6. _._
  7. _.-``__ ''-._
  8. _.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit
  9. .-`` .-```. ```\/ _.,_ ''-._
  10. ( ' , .-` | `, ) Running in standalone mode
  11. |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
  12. | `-._ `._ / _.-' | PID: 23099
  13. `-._ `-._ `-./ _.-' _.-'
  14. |`-._`-._ `-.__.-' _.-'_.-'|
  15. | `-._`-._ _.-'_.-' | http://redis.io
  16. `-._ `-._`-.__.-'_.-' _.-'
  17. |`-._`-._ `-.__.-' _.-'_.-'|
  18. | `-._`-._ _.-'_.-' |
  19. `-._ `-._`-.__.-'_.-' _.-'
  20. `-._ `-.__.-' _.-'
  21. `-._ _.-'
  22. `-.__.-'
  23. 23099:M 21 Aug 10:50:02.398 # Server initialized
  24. 23099:M 21 Aug 10:50:02.398 # WARNING 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.
  25. 23099:M 21 Aug 10:50:02.399 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
  26. 23099:M 21 Aug 10:50:02.399 * Ready to accept connections
  27. ^C23099:signal-handler (1534820069) Received SIGINT scheduling shutdown...
  28. 23099:M 21 Aug 10:54:29.091 # User requested shutdown...
  29. 23099:M 21 Aug 10:54:29.092 * Saving the final RDB snapshot before exiting.
  • 2、运行启动

redis-server加上要修改配置名和值(可以是多对),没有设置的配置将使用默认配置:

redis-server --configKey1 configValue1 --configKey2 configValue2

以配置端口6380启动

  1. [root@node02 redis]# redis-server --port 6380
  2. 23399:C 21 Aug 10:54:31.993 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  3. 23399:C 21 Aug 10:54:31.993 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=23399, just started
  4. 23399:C 21 Aug 10:54:31.993 # Configuration loaded
  5. 23399:M 21 Aug 10:54:31.995 * Increased maximum number of open files to 10032 (it was originally set to 1024).
  6. _._
  7. _.-``__ ''-._
  8. _.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit
  9. .-`` .-```. ```\/ _.,_ ''-._
  10. ( ' , .-` | `, ) Running in standalone mode
  11. |`-._`-...-` __...-.``-._|'` _.-'| Port: 6380
  12. | `-._ `._ / _.-' | PID: 23399
  13. `-._ `-._ `-./ _.-' _.-'
  14. |`-._`-._ `-.__.-' _.-'_.-'|
  15. | `-._`-._ _.-'_.-' | http://redis.io
  16. `-._ `-._`-.__.-'_.-' _.-'
  17. |`-._`-._ `-.__.-' _.-'_.-'|
  18. | `-._`-._ _.-'_.-' |
  19. `-._ `-._`-.__.-'_.-' _.-'
  20. `-._ `-.__.-' _.-'
  21. `-._ _.-'
  22. `-.__.-'
  23. 23399:M 21 Aug 10:54:31.996 # Server initialized
  24. 23399:M 21 Aug 10:54:31.996 # WARNING 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.
  25. 23399:M 21 Aug 10:54:31.996 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
  26. 23399:M 21 Aug 10:54:31.996 * DB loaded from disk: 0.000 seconds
  27. 23399:M 21 Aug 10:54:31.996 * Ready to accept connections
  28. ^C23399:signal-handler (1534820140) Received SIGINT scheduling shutdown...
  29. 23399:M 21 Aug 10:55:40.060 # User requested shutdown...
  30. 23399:M 21 Aug 10:55:40.060 # Redis is now ready to exit, bye bye...
  • 3、配置文件

创建 redis conf目录,从源码包中拷贝配置文件,创建配置文件

mkdir -p /etc/redis/ && cp /usr/local/redis/redis.conf /etc/redis/redis-6379.conf

修改redis-server以守护进程的方式在后台启动

vim /etc/redis/redis-6379.conf

daemonize yes

  1. [root@node02 redis]# redis-server /etc/redis/redis-6379.conf
  2. 23767:C 21 Aug 10:59:46.474 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  3. 23767:C 21 Aug 10:59:46.474 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=23767, just started
  4. 23767:C 21 Aug 10:59:46.474 # Configuration loaded
  5. [root@node02 redis]# ps -ef |grep redis
  6. root 23768 1 0 10:59 ? 00:00:00 redis-server 127.0.0.1:6379
  7. root 23920 16087 0 11:00 pts/1 00:00:00 grep --color=auto redis
  8. [root@node02 redis]# redis-cli
  9. 127.0.0.1:6379> set tname xxxxx
  10. OK
  11. 127.0.0.1:6379> get tname
  12. "xxxxx"
  13. 127.0.0.1:6379>

4.4 停止Redis服务

  • 直接kill掉 (kill pidof redis-server
  1. [root@node02 ~]# ps -ef |grep redis|grep -v grep
  2. root 23768 1 0 10:59 ? 00:00:00 redis-server 127.0.0.1:6379
  3. [root@node02 ~]# pidof redis-server
  4. 23768
  5. [root@node02 ~]# kill `pidof redis-server`
  • 优雅关闭和推荐关闭
  1. [root@node02 redis]# redis-cli
  2. 127.0.0.1:6379> SHUTDOWN
  3. not connected> exit
  4. [root@node02 redis]# ps -ef |grep redis|grep -v grep
  • 里有三点需要注意:

    • 1.Redis关闭的过程:断开与客户端的连接、持久化文件生成,是一种相对优雅的关闭方式。
    • 2.除了可以通过shutdown命令关闭Redis服务以外,还可以通过kill进程号的方式关闭掉Redis,但是不要粗暴地使用kill-9强制杀死Redis服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况。
    • 3.shutdown还有一个参数,代表是否在关闭Redis前,生成持久化文件:redis-cli shutdown nosave|save

01:初识Redis的更多相关文章

  1. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  2. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  3. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  4. TensorFlow --- 01初识

    由于博客园对Markdown支持不够友好,阅读此文请前往云栖社区:TensorFlow --- 01初识

  5. redis实战笔记(1)-第1章 初识Redis

    第1章 初识Redis 注:本书在redis3.0版本的,比如redis3.0以后支持服务端集群.3.0之前只能客户端分片.    本章主要内容 1.Redis与其他软件的相同之处和不同之处 2.Re ...

  6. Linux(5)- MariaDB、mysql主从复制、初识redis

    一.MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL ...

  7. day24 01 初识继承

    day24 01 初识继承 面向对象的三大特性:继承,多态,封装 一.继承的概念 继承:是一种创建新类的方式,新建的类可以继承一个或者多个父类,父类又可称基类或超类,新建的类称为派生类或者子类 cla ...

  8. 分布式数据存储 之 Redis(一) —— 初识Redis

    分布式数据存储 之 Redis(一) -- 初识Redis 为什么要学习并运用Redis?Redis有什么好处?我们步入Redis的海洋,初识Redis. 一.Redis是什么 ​ Redis 是一个 ...

  9. day22 01 初识面向对象----简单的人狗大战小游戏

    day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战   怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...

随机推荐

  1. shell 判断字符串长度是否不为0

    test.sh #!/bin/bash s1="" if test $s1 ;then echo "length is not zero" else echo ...

  2. 遗传算法 Genetic Algorithm

    2017-12-17 19:12:10 一.Evolutionary Algorithm 进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算 ...

  3. 递归--练习6--noi1755菲波那契数列

    递归--练习6--noi1755菲波那契数列 一.心得 二.题目 1755:菲波那契数列 总时间限制:  1000ms 内存限制:  65536kB 描述 菲波那契数列是指这样的数列: 数列的第一个和 ...

  4. 自行申请德国的VAT号码?

    我在香港/大陆地区,是否可以自行申请德国的VAT号码? 德国联邦税务局按照不同国家申请人划分成不同申请办公室,以下为德国联邦税务局负责中国境内申请人的办公室地址及联络方式: FINANZAMT BER ...

  5. linux利用软件raid搭建iscsi存储

    分区:parted /dev/sdbmklabel gptmkpart primary ext4 0% 100%set 1 raid mdadm -Cv /dev/md0 -n 4 -l5 /dev/ ...

  6. III USP Freshmen ContestH. MaratonIME gets candies

    这题挺有意思的,刚开始不会这交互题,模仿着做了一题就会了,蛮简单 的 这题我用2分,结果wa了,想了一下发现,1到1e9二分50次完全不够用啊,那就转换一下思维,先求出在10^n~10^(n+1)的n ...

  7. poj3734矩阵快速幂

    挑战上面的题目,感觉脑洞很大 分别找红蓝个数全为偶,全为奇,一奇一偶的个数ai,bi,ci 转移矩阵是| 2 1 0 |,是一个对称矩阵(会不会有什么联系.) | 2 2 2 | | 0 1 2 | ...

  8. UVA-10384 The Wall Pushers (IDA*)

    题目大意:走迷宫,遇到墙时可以推着墙走,但墙后还是墙时便不能推.求出一条任意的最短路径. 题目分析:这道题出的比较人性,输入的时候便是将四周的墙用二进制数表示好了,其实这样减轻了做题人的负担.IDA* ...

  9. HDU-5492 Find a path (枚举+DP)

    Problem Description Frog fell into a maze. This maze is a rectangle containing N rows and M columns. ...

  10. gruntjs开发实例

    Grunt是基于Node.js的项目构建工具.它可以自动运行你所设定的任务,如编译less,sass,压缩js,合拼文件等等. (一)安装nodejs环境,Grunt 0.4.x要求Node.js的版 ...