redis概念

一、Redis简介
1.0 Redis简介
什么是Redis
Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-value数据库,并提供多种语言的API。

BSD是"Berkeley Software Distribution"的缩写,意思是"伯克利软件发行版"。
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。BSD代码鼓励代码共享,但需要尊重代码作者的著作权。
BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。
1.1 NoSQL
NoSQL,泛指非关系型的数据库,NoSQL即Not-only sQL,它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数掘瘁产品的发展非常迅速

而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如∶
1、High performance -对数据库高并发读写的需求
web2.0网站要根把用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写涛求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了,其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如网站的安时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。
2、Huge Storage -对海量数据的高效本存储和访问的需求
类似Facebook , twitter ,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效本是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,吸大,动辄数以亿计的帐号,关系数据库也很难应付。
3、High scalability && High Availability-对数据库的高可扩展性和高可用性的需求
在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数袭库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩屣性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数架库不能通过不断的添加服务器节点来实现扩展呢?

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题
1.2 NoSQL的类别
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个骀希表,这个表中有一个特定的键和一个指针指向特定的数据。
Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/valu就显得效率低下了

相关产品:Tokyo cabinet/Tyrant、Redis、voldemort. Berkeley DB
典型应用:内容缓存,主要用于处理大量数据的高访问负载。
数据模型:一系列键值对
优势:快速查询
劣势:存储的数据缺少结构化
列存储数据库
这部分数据库通常是用来应对分布式存储的海量数招。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。

相关产品: Cassandra,HBase, Riak
典型应用:分布式的交件系统
数招模型:以列簇式存储,将同一列数据存在一起
优势:查援速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种楗值存磕相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存债,比如JSON。文档型数据库可以看作是犍值数据库的升级版,允许之间嵌套健值,而且文档型数招库比健值数洞库的查询效率更高。

相关产品:CouchDB、MongoDB
典型应用: web应用(与Key-value类似,value是结构化的)
数据模型:一系列键值对
优势:数据结构要求不严格
劣势:查询性能不高,而且缺乏统一的查询语法
图形(Graph)数据库
图形结构的数掘库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查阖AP工。
相关数据库:Neo4J、InfoGrid、 Infinite Graph
典型应用:社交网络
数招模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不客易做分布式的集群方案.
总结:
因此,我们总结NoSQL数据库在以下的这几种情况下比较话用:
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key ,比较容易映射复杂值的环境
Redis特点

  • 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s .
  • 丰富的数据类型-Redis支持的类型String, Hash,List, , Set 及 Ordered Set数据类型操作。
  • 原子性- Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性- Redis还支持publish/subscribe,通知, key过期等等特性。
  • 高速读写,redis使用自己实现的分离器,代码量很短,没有使用lock ( MySQL),因此效率非常高。

Redis是一个简单的,高效的,分布式的,基于内存的缓存工具。
架设好服务器后,通过网络连接(类似数掘库),提供xey - value式缓存服务。
简单,是Redis突出的特色。
简单可以保证核心功能的稳定和优异。

1.3Redis的应用场景
企业级开发中:
可以用作数据库、缓存、热点数据(经常会被查询,但是不经常被修改或者删除的数据)
和消息中间件等大部分功能。

redis常用的场景示例如下:
1、缓存
缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大锋低数据库的压力。Redis提供了楗过期功能,也提供了灵活的健淘汰策略,所以,现在Redis用在缓存的场合非常多。
2、排行榜
很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构聪实现各种复杂的排行榜应用。
3、计数器
什么是计数棘,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得始+1,并发量高时如開每次都涛求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。
4、分布式会话
集群模式下,在应用不多的情况下一般使用容器自带的session复制功能就能满足,当应用增多相对复杂的系统中,一般都会搭建以Redis等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理.
5、分布式锁
在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访间,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场台中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性鲲。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的畑节要更多。
6、社交网烙
点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量通常来说比较大,而且传统的关系数据庳类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能。
7、最新列表
Redis列表结构,LPUSH可以在列表头部插入一个内容1D作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。
8、消息系统
消息队列是大型网站必用中间件,如ActiveMQ、RabbitwQ、Kafka等流行的消息队列中间件,主要用于业务解耦、流量销峰及异步处理实时性低的业务。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。
1.4 Redis总结
1.4.1 Redis优势

  • 性能极高- Redis能读的速度是110000次/s,写的速度是81000次J/s .
  • 丰富的数据类型- Redis支持的类型String, Hash,List, , Set及 Ordered Set数据类型操作。
  • 原子性- Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性- Redis还支持publish/subscribe,通知, key过期等等特性。
  • 高速读写,redis使用自己实现的分离器,代码量很短,没有使用lock ( MySQL),因此效率非常高
    1.4.2 Redis缺点
  • 持久化。Redis直接将数据存储到内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化过程。定时快照(snapshot ) :每隔一段时间将整个数据库写到磁盘上,每次均是写全部数据,代价非常高。第二种方式基于语句追加( aof ):只追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍,恢复速度慢。
  • 耗内存,占用内存过高。

二、Redis启动
安装Redis
redis是C语言开发,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境。如果没有gcc环境,需要安装gcc:

yum install gcc-c++

下载并安装命令:

wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar xzf redis-2.8.13.tar.gz
cd redis-2.8.13
make
make PREFIX=/usr/local/redis install
cp redis.conf /usr/local/redis

执行完 make 命令后,redis-6.0.8 的 src 目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli;
make PREFIX=/usr/local/redis install之后执行操作是为了将bin目录启动的单独安装在/usr/local/redis目录下,这是我的目录,这样方便后续不需要通过两个页面进行redis的操作(一个进行客户端启动,一个进行连接操作)操作完成后/usr/local/redis会产生bin文件夹,里边是redis客户端等一些启动入口;

vi /usr/local/redis/redis.conf
//修改daemonize no 为yes保存
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

启动Redis服务端
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf这样启动没有了直接在bin目录下启动的redis介绍的弹出,不带redis.conf配置文件的启动后,我们需要再开一个窗口进行连接,这样的话就可以在下一行命令中进行客户端的连接;
如果要关闭服务端,通过ps -ef | grep -i redis然后kill -9 4684的方式关闭
启动Redis客户端
在redis的安装目录中有redis的客户端,即redis-cli ( Redis Command Line Interface)
它是Redis自带的基于命令行的Redis客户端
执行/usr/local/redis/bin/redis-cli即可进行redis操作
启动Redis 客户端命令语法:

redis-cli -h IP地址-p 端口 //默认IP本机  端口6379

退出客户端命令:Ctrl+C
检测是否服务端启动
启动redis客户端,打开终端并输入命令redis-cli。该命令会连接本地的redis 服务。

[root@localhost redis]# ./bin/redis-cli 
127.0.0.1:6379>
127.0.0.1:6379>ping
PONG
127.0.0.1:6379> set name mdl
OK
127.0.0.1:6379> get name
"mdl"
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379>

在以上实例中我们连接到本地的redis 服务并执行ping命令,该命令用于检测redis 服务是否启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值