初始redis

目录

前言:

1.盛赞redis

2 redis特性

3.redis的典型应用场景

4.安装并启动redis


前言:

        本章将带领读者进入Redis的世界,了解它的前世今生、众多特性、典型应用场景、安装配置、如何用好等,最后会对Redis发展过程中的重要版本进行说明。

1.盛赞redis

        Redis是一种基于键值对(key-value) 的NoSQL数据库,与很多键值对数据库不同的是,Redis
中的值可以是由string (字符串)、hash (哈希)、list (列表)、set (集合) 、zset (有序集合)、
Bitmaps (位图)、HyperLogLog、 GEO (地理信息定位)等多种数据结构和算法组成,因此Redis
可以满足很多的应用场景,而且因为Redis会将所有数据都存放再内存中,所以它的读写性能非常惊人。不仅如此,Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失” 。除了上述功能以外,Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等附加功能。总之,如果在合适的场景使用号Redis,它就会像一把瑞士军刀一样所向披靡。
        2008年,Redis 的作者Salvatore Sanfilippo在开发一个叫LLOOGG的网站时,需要实现一个高性能的队列功能,最开始是使用MySQL来实现的,但后来发现无论怎么优化SQL语句等都不能使网站的性能提高.上去,再加上自己囊中羞涩,于是他决定自己做一个专属于LLOOGG的数据库,这个就是Redis的前身。后来,Salvatore Sanfilippo将Redis 1.0的源码发布到Github.上,可能连他自己都,没想到,Redis 后来如此受欢迎。
        假如现在有人问Redis的作者都有谁在使用Redis,我想他可以开句玩笑的回答:还有谁不使用
Redis,当然这只是开玩笑,但是从Redis的官方公司统计来看,有很多重量级的公司都在使用
Redis,如国外的Twitter、Instagram、 Stack Overflow、Github 等,国内就更多了,如果单单从体
量来统计,新浪微博可以说是全球最大的Redis使用者,除了新浪微博,还有像阿里巴巴、腾讯、搜狐、优酷土豆、美团、小米、唯品会等公司都是Redis的使用者。除此之外,许多开源技术像ELK等已经把Redis作为它们组件中的重要一环, 而且Redis还提供了模块系统让第三方人员实现功能扩展,让Redis发挥出更大的威力。所以,可以这么说,熟练使用和运维Redis已经成为开发运维人员的一个必备技能。

2 redis特性

Redis之所以受到如此多公司的青睐,必然有之过人之处,下面是关于Redis的8个重要特性。

1.速度快
正常情况下,Redis 执行命令的速度非常快,官方给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能,但这里先不讨论机器性能上的差异,只分析一下是什么造就了Redis如此之快,可以大概归纳为以下四点:
●Redis 的所有数据都是存放在内存中的, 表1-1 是谷歌公司2009年给出的各层级硬件执行速度,所以把数据放在内存中是Redis速度快的最主要原因。
Redis是用C语言实现的,一般来说C语言实现的程序“距离” 操作系统更近,执行速度相对会更快。
●Redis使用了单线程,预防了多线程可能产生的竞争问题。
Redis在6.0版本引入了多线程机制,但主要也是在处理网络和I0,不涉及到数据命令,即命令
的执行仍然采用了单线程模式。.
●作者对于Redis源代码可以说是精打细磨,曾经有人评价Redis是少有的集性能和优雅于一身的开
源代码。
表1-1谷歌公司给出的各层级硬件执行速度

2.基于键值对的数据结构服务器
几乎所有的编程语言都提供了类似字典的功能,例如C++里的map、Java 里的map、Python 里
的dict等,类似于这种组织数据的方式叫做基于键值对的方式,与很多键值对数据库不同的是,
Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能提高开发效率。Redis 的全程是REmote Dictionary Server,它主要提供了5种数据结构:字符串(string) 、哈希(hash) 、列表(list) 、集合(set) 、有序集合(ordered set /zet),同时在字符串的基础之.上演变出了位图(Bitmaps) 和HyperLogLog两种神奇的”数据结构“,并且随着LBS (Location Based Service,基于位置服务)的不断发展,Redis 3.2.版本种加入有关GEO (地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应用。

3.丰富的功能
除了5种数据结构,Redis 还提供了许多额外的功能:
提供了键过期功能,可以用来实现缓存。
提供了发布订阅功能,可以用来实现消息系统。
支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
提供了简单的事务功能,能在一-定程度 上保证事务特性。
提供了流水线(Pipeline) 功能,这样客户端能将一批命令一次性传 到Redis,减少了网络的开销。

4.简单稳定
Redis的简单主要表现在三个方面。首先,Redis 的源码很少,早期版本的代码只有2万行左右,
3.0版本以后由于添加了集群特性,代码增至5万行左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员完全可以“吃透” 它。其次,Redis 使用单线程模型,
这样不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。最后,Redis 不需要依赖于操作系统中的类库(例如Memcache需要依赖libevent这样的系统类库),Redis 自己实现了事件处理的相关功能。但与简单相对的是Redis具备相当的稳定性,在大量使用过程中,很少出现因为Redis自身BUG而导致宕掉的情况。

5.客户端语言多
Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,并且由于Redis受到社区和各大公司的广泛认可,所以支持Redis的客户端语言也非常多,几乎涵盖了主流的编程语言,例如C、C++、Java、 PHP、Python、 NodeJS 等,后续我们会对Redis的客户端使用做详细说明。

6.持久化(Persistence)
通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因此Redis提供了两种持久化方式: RDB和AOF,即可以用两种策略将内存的数据保存到硬盘中
(如图1-1所示),这样就保证了数据的可持久性,后续我们将对Redis的持久化进行详细说明。

图1-1 Redis内存到硬盘的持久化

7.主从复制(Replication)
Redis提供了复制功能,实现了多个相同数据的Redis副本(Replica) (如图 1-2所示),复制功能是分布式Redis的基础。后续我们会对Redis的复制功能进行详细演示。

图1-2 Redis主从复制架构

8.高可用(High Availability)和分布式(Distributed)
Redis提供了高可用实现的Redis哨兵(Redis Sentinel),能够保证Redis结点的故障发现和故障自动转移。也提供了Redis集群(Redis Cluster), 是真正的分布式实现,提供了高可用、读写和容量的扩展性。

3.redis的典型应用场景

1.缓存(Cache)
缓存机制几乎在所有大型网站都有使用,合理地使用缓存不仅可以加速数据的访问速度,而且能
够有效地降低后端数据源的压力。Redis 提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
2.排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照
各种复杂维度计算出的排行榜, Redis 提供了列表和有序集合的结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。

3.计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的
实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是-种挑
战。Redis 天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
4.社交网络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量
通常比较大,而且传统的关系型数据不太合适保存这种类型的数据,Redis 提供的数据结构可以相对比较容易地实现这些功能。
5.消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等
特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。

4.安装并启动redis

        上面,我们大致了解了Redis的几个重大版本,我们在本教程中选择5.0版本,原因是5.0已经
支持了大部分的功能特性,而且相比较于7.0版本,更容易进行安装使用。

注:

Redis的官方并不支持微软的Windows操作系统,因为Redis的许多特性都是和操作系统相关的,所以支持Windows会增加维护成本,而且更重要的是大部分公司都在使用Linux操作系统,而Redis在Linux操作系统上的表现已经得到实践的证明。当然Redis作为一款优秀的开源技术,还是吸引到微软公司的注意,微软公司的开源技术组在Github.上维护了一个Redis分支: https://github.com/MSOpenTech/redis。 不过我们还是强烈建议大家在Linux上使用Redis。

接下来我们选择在Linux上安装redis。

在Centos上安装redis:

使用yum安装,首先安装scl源,再安装redis

yum install centos-release-scl-rh
yum install rh-redis5-redis

创建符号链接
默认安装的目录为/opt/rh/rh-redis5/root/usr/bin/ ,藏的太深了,不方便使用.我们通过符号链接,把需
要用到的关键内容设置到方便使用的目录中.

cd /usr/bin
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-sentinel ./redis-sentinel
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-cli ./redis-cli

针对配置文件设置符号链接

cd /etc/
ln -s /etc/opt/rh/rh-redis5/ ./redis

修改配置文件
a.设置ip地址

bind 0.0.0.0 

b.关闭保护模式

protected-mode no 

c.启动守护进程

daemonize yes 

设置工作目录
先创建工作目录

mkdir -p /var/lib/redis

再在配置文件中,设置工作目录

dir /var/lib/redis

设置日志目录
先创建日志目录

mkdir -p /var/log/redis/ 

再在配置文件中,设置日志目录.

logfile /var/log/redis/redis-server.log 

启动redis

redis-server /etc/redis/redis.conf 

停止redis
先查看到redis-server的pid

ps aux | grep redis 

然后通过kill命令直接杀死redis进程

kill 进程id 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/289082.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Github项目推荐-30天Python教程

项目地址 GitHub - Asabeneh/30-Days-Of-Python 项目简述 这是一个非常棒的python入门教程,图文并茂,讲解清晰,十分值得推荐。 项目截图

大数据分析22、23真题回忆

2022 学长描述 1. 一个很简单的据估计 2. 算一个决策树 3. Cypher图 4.Hadoop和Spark的区别 2023 真题回忆 1. 大数据分析的定义 说出大数据分析三个层次 2.大数据分析流程 预处理部分包含哪几个步骤 3.Spark核心部件和应用库有哪些 并简要说明功能 4. 主成分分析和因…

Mysql的逻辑架构

一、Server层组件 1、连接器 连接器的作用是建立连接,管理权限,维持和管理连接 2、查询缓存 查询缓存的作用是以sql为key去查询缓存,如果缓存存在则直接返回结果 3、解析器 解析器的作用是对sql语句进行语法分析,和词法分析…

RTDETR论文快速理解和代码快速实现(训练与预测)

文章目录 前言一、摘要二、论文目的三、论文贡献四、模型结构1、模型整体结构2、backbone结构3、neck结构4、混合编码器(neck) 五、RTDERT模型训练(data-->train)1、环境安装2、训练1、数据准备2、数据yaml文件3、训练代码4、训练运行结果 3、推理1、推理代码2、推理运行结果…

PyQt5连接mysql失败解决

一:背景 最近研究一个项目,里面用的Pyqt5编写的桌面应用,跑了下源码发现连接数据库那块出来问题,最终调试发现里面用的QtSql去连接mysql提示驱动找不到。 具体报错信息如下: Could not parse stylesheet of object …

CAS为什么还存在线程安全问题(从所谓的ABA问题再学CAS)

概述 之前学习 CAS,从 Java 代码层面知道其原理,借助一条 CPU 原子指令,通过不断地自旋去比较(compare)和(and)赋值(set)。当时对线程安全的认知停留在将多条 Java 语句…

MySQL实战45讲课后问题

1、第一章 如果表T中没有字段k,而你执行了这个语句 select *fromTwhere k1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢? 解答:…

STL stack练习

CSTL之stack栈容器 - 数据结构教程 - C语言网CSTL之stack栈容器1.再谈栈回顾一下之前所学的栈,栈是一种先进后出的数据结构,而实现方式需要创建多个结构体,通过链式的方式进行实现,这是标准的栈的思路,而在STL中栈可以…

中央空调冷却塔循环水全自动加药装置PH电导率设备工作原理动画

一:全自动加药装置【概述】 随着在给水、排水处理过程中,常常投加各类化学药剂作为阻垢、杀菌灭藻、混凝、絮凝用,以达到净化水的目的。这些药剂有固体颗粒、液体,在投加过程中必须溶解、稀释及按配比定量投加方能取得最佳效果&am…

数据安全扫描仪荣膺网络安全优秀创新成果大赛优胜奖 - 凸显多重优势

近日,由中国网络安全产业联盟(CCIA)主办、CCI数据安全工作委员会中国电子技术标准化研究院等单位承办的“2023年网络安全优秀创新成果大赛”获奖名单公布。天空卫士数据安全扫描仪(DSS)产品获得创新成果大赛优胜奖。 本…

jenkins入门

文章目录 前言一、 jenkins的安装二、新建简单任务总结 前言 本篇文章是 jenkins 的入门级别案例,包括安装、基础概念介绍、新建简单任务 一、 jenkins的安装 下载 jenkins https://www.jenkins.io/download/ 当前案例下载的是 2.426.2 LTS 版本 下载安装jdk11 …

Leetcode—75.颜色分类【中等】

2023每日刷题&#xff08;六十五&#xff09; Leetcode—75.颜色分类 实现代码 class Solution { public:void sortColors(vector<int>& nums) {int red 0, white 0, blue 0;for(auto num: nums) {if(num 0) {red;} else if(num 1) {white;} else {blue;}}for…