Redis学习笔记

Redis学习笔记

一 、Redis简介
1.1 什么是Redis

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

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

传统数据库暴露很多难以克服的问题,如下问题:

xml 复制代码
1、High performance - 对数据库高并发读写的需求。

2、Huge Storage - 对海量数据的高效存储和访问的需求。

3、High Scalability && High Availability - 对数据库的高可扩展性和高课用性的需求。
1.3 NoSQL的类别

键值(Key-Value)存储数据库

xml 复制代码
  这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
key/value模型对于IT系统涞水的优势在于简单,已部署。但是如果DBA只对部分值进行查询或者更新的时候,key/value显示的效率低下。
相关产品 : Redis,Tokyo Cabinet
典型应用 : 内存缓存,主要用于处理大量数据的高访问负载。
数据模型 : 一系列键值对
优势 : 快速查询
劣势 : 存储的数据缺少结构化

列存储数据库

xml 复制代码
这部分数据库通常是用来对分布式存储的海量数据。键仍然存在,但是他们的特点是指向了多个列。这些列是由列家族来安排的。
相关产品 : HBase 、Riak
典型应用 : 分布式的文件系统
数据模型 : 以列簇式存储,将同一列数据存在一起
优势 : 查找速度快,可扩展性强,更容易进行分布式扩展
劣势 : 功能相对于局限

文档型数据库

xml 复制代码
文档型数据库:该类型的数据库模型是版本化的文档,半结构化的文档一特定的格式存储,比如JSON。文档数据库可以看做键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
相关产品:MOngoDB
典型应用 : web应用
数据模型 : 一系列键值对
优势 : 数据结构要求不严格
劣势 : 查询性能不高,而且缺乏统一的查询语言
1.4 总结:

NoSQL 数据库在一下的这几种情况下比较适用 :

1、数据模型比较简单;

2、需要灵活更前的IT系统;

3、对数据库性能要求较高;

4、不需要高度的数据一致性;

5、对于给定key,比较容易映射复杂的环境;

1.5 Redis 描述

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

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

Redis是一个简单的,高效的,分布式的,基于内存的缓存工具。

架设好服务器后,通过网络连接(类似数据库),提供Key-Value缓存服务。

简单,是Redis突出的特色。

简单可以保证核心功能的稳定和优异。

1.7 Redis的应用场景

可以作为数据库,缓存,热点数据(经常别查询,但是不经常被修改或者删除的数据)和消息中间件等大部分功能。

Redis常用的场景示例如下:

xml 复制代码
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可以在列表头部插入一个内容ID作为关键字,LTRIM可以用来限制列表的数量,这样列表永远为N个ID。无需查询最新的列表,直接根据ID 去到对应的内容也即可。
8、消息系统
   消息对队列是网站比用中间件,如ActiveMQ,RabbitMQ,Kafaka等流行的消息队列中间件,主要用于业务解耦,流量削峰及异步处理试试性低的业务。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能喝专业的消息中间件相比。
1.8 Redis总结

优势

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

缺点

  • 持久化 。 Redis直接将数据存储到内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化过程。定时快照(snapshot):每个一端时间将整个数据库写到磁盘上,每次均是写全部数据,代价非常高。第二种方式基于语句追加(aof):只追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍,回复速度慢
  • 耗内存 、占用内存过高。
相关推荐
kobesdu38 分钟前
【ROS2实战笔记-18】ROS2 通信的隐秘控制:DDS 配置参数如何决定系统性能
网络·人工智能·笔记·机器人·开源·ros·人形机器人
雨落在了我的手上1 小时前
如何学习java?
java·开发语言·学习
吃好睡好便好2 小时前
汽车基本组成
学习·汽车
nnsix2 小时前
Unity 动画 Avatar 笔记
笔记·unity·游戏引擎
Emily呀3 小时前
【无标题】
redis
拾忆丶夜3 小时前
unity 热力图学习
学习·unity·游戏引擎
愈努力俞幸运3 小时前
function calling与mcp
android·数据库·redis
red_redemption3 小时前
自由学习记录(183)
学习·ue项目改名字的学问
lizhihai_994 小时前
股市学习心得-智能体顶层设计文件收益供应链
大数据·人工智能·学习
中草药z4 小时前
【测试基础】Python 核心语法,一篇搞定测试脚本开发基础
开发语言·笔记·python·学习·测试·语法