01:初识Redis

01:初识Redis

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

1、本章知识

1.1 本章内容

  • 盛赞Redis
  • Redis特性
  • Redis使用场景
  • 用好Redis的建议
  • 正确安装启动Redis
  • Redis重大版本

1.2 重点

  • 1) Redis的8个特性: 速度快、 基于键值对的数据结构服务器、 功能丰富、 简单稳定、 客户端语言多、 持久化、 主从复制、 支持高可用和分布式。
  • 2) Redis并不是万金油, 有些场景不适合使用Redis进行开发。
  • 3) 开发运维结合以及阅读源码是用好Redis的重要方法。
  • 4) 生产环境中使用配置文件启动Redis。
  • 5) 生产环境选取稳定版本的Redis。
  • 6) Redis3.0是重要的里程碑, 发布了Redis官方的分布式实现Redis
  • Cluster。

1.3 redis简介

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

  • [1 ] http://redis.io
  • [2 ] http://antirez.com
  • [3 ] https://github.com/antirez/redis

1.4 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节点的故障发现和故障自动转移

1.5 Redis使用场景

1. redis擅长

  • 1.缓存

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

  • 2.排行榜系统

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

  • 3计数器应用

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

  • 4.社交网络

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

  • 5.消息队列系统

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

2 redis不擅长

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

1.6 Redis安装

使用最新版本就是最佳实践,目前是5.04版本

1. 安装

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

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

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

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

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

ln -s /usr/local/redis-5.0.4/ /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的命令。

2 简单配置

Redis可执行文件说明

可执行文件作用
redis-serverredis服务器
redis-cliredis命令客户端
redis-benchmarkredis性能压测工具
redis-check-rdbRDB文件检查工具
redis-check-aofAOF文件检查工具
redis-sentinel高可用安装部署

3 启动redis

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

  • 1、默认配置

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

[root@node01 redis]# redis-server
7673:C 07 Nov 2019 10:08:57.240 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7673:C 07 Nov 2019 10:08:57.240 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=7673, just started
7673:C 07 Nov 2019 10:08:57.240 # Configuration loaded
7674:M 07 Nov 2019 10:08:57.243 * Increased maximum number of open files to 10032 (it was originally set to 1024).
7674:M 07 Nov 2019 10:08:57.244 * No cluster configuration found, I'm 8592f86ed3669f383a7ca60c354bee5ead5bfde5
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.4 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 7674
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

7674:M 07 Nov 2019 10:08:57.246 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
7674:M 07 Nov 2019 10:08:57.246 # Server initialized
7674:M 07 Nov 2019 10:08:57.246 # 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.
7674:M 07 Nov 2019 10:08:57.246 # 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.
  • 2、运行启动

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

redis-server --configKey1 configValue1 --configKey2 configValue2

  • 3、配置文件

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

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

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

vim /etc/redis/redis-6379.conf
daemonize yes

[root@node01 redis]#  redis-server /usr/local/redis/conf/redis-6379.conf
[root@node01 redis]# ps -ef |grep redis
root     23768     1  0 10:59 ?        00:00:00 redis-server 127.0.0.1:6379
root     23920 16087  0 11:00 pts/1    00:00:00 grep --color=auto redis

[root@node01 redis]# redis-cli -p 6379
127.0.0.1:6379> set redis kvdb
OK
127.0.0.1:6379> get redis
"kvdb"
127.0.0.1:6379> 

4 停止Redis服务

  • 直接kill掉 (kill pidof redis-server
[root@node01 ~]# ps -ef |grep redis|grep -v grep
root     23768     1  0 10:59 ?        00:00:00 redis-server 127.0.0.1:6379
[root@node01 ~]# pidof redis-server
23768
[root@node01 ~]# kill `pidof redis-server`
  • 优雅关闭和推荐关闭
[root@node01 redis]# redis-cli 
127.0.0.1:6379> SHUTDOWN
not connected> exit
[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值