Redis学习笔记[C#]

最近在学习Redis,俗话说“好记性不如烂笔头”,把自己最近的学习笔记记录下来,材料多来自于网络,个人收集并整理仅供参考,欢迎各位大佬指教!

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。--百度百科

Redis 的教程网上有很多这里我就不再赘述,英语好的大佬可直接去官网学习,国内也有很多教程网站,这里随便列举一个--菜鸟教程

Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。

都说Redis速度很快,据有关数据表示Redis读的速度是 110000次/s(11 W次/s),写的速度是81000次/s(8.1W 次/s),视具体使用环境及机器性能而定。凭什么Redis能这么快地操作数据,主要原因大致有如下几点:

1.采用了多路复用IO阻塞机制,关于I/O模型与多路复用原理这里有一篇文章我觉得写的很好,推荐给大家。

2.完全基于内存,绝大部分请求是纯粹的内存操作,速度自然非常快速。

3.数据结构简单,redis提供五种数据类型:string,hash,list,set及zset(sorted set),数据操作十分简单。

4.采用单线程,不存在因多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁等操作,不会因为死锁而导致的性能消耗。这里的单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。所以Redis的瓶颈不是cpu的运行速度,而往往是网络带宽和机器的内存大小。关于为什么Redis是单线程官方也有FAQ,感兴趣的小伙伴可以前去查看。

5.Redis使用到了自己的VM机制,因为使用一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。Redis通过VM功能可以实现冷热数据分离,使热数据仍在内存中,冷数据保存到磁盘,这样就可以避免因为内存不足而造成访问速度下降的问题。

------------------------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

对于大部分人来说最关心的还是Redis有什么用,怎么用,使用Redis我们可以获得哪些好处呢。那么Redis到底可以用来做什么呢,常见的使用场景大致有如下几点:

1.缓存,可以说缓存是Redis最常见的使用场景了,在提升服务器性能方面非常有效。将经常使用到的数据放在Redis中,取数据时先读取Redis,没有命中则再去读取数据库,减少下层持久层数据库的压力。

2.消息队列,利用Redis的list数据结构,能够很方便的执行队列操作。关于消息队列现有许多成熟的组件如Kafka、ActiveMQ、RabbitMQ等,Redis相比这些专门的MQ组件优势在于轻量级,但是Redis没有ack(消息确认机制),有可能会丢消息,对于要求不是很高的场景可以考虑使用Redis来实现消息队列。

3.分布式锁,利用Redis的单线程及SETNX命令可以方便的实现分布式锁,关于分布式锁的知识这里不做赘述,有兴趣的小伙伴们可以自行研究,这里推荐几篇不错的文章:分布式锁概念及实现方式什么是分布式锁

4.排行榜,使用传统数据库来实现排行榜功能时,一个名次的变化可能会引起多个名次随着改变,当名次数量较多时将导致对数据库的频繁修改,性能下降。而使用Redis的zset(有序集合)数据结构能够非常方便地实现排行榜功能,zset是通过Skip List(跳跃表)和hash Table(哈希表)的双端口数据结构实现的,因此每次添加元素时,Redis都会执行排序操作。所以当我们要求排序的时候,Redis根本不需要做任何工作了,早已经全部排好序了。

5.计数器,利用Redis的INCR命令可以方便快捷地实现计数器功能,应用场景有电商网站商品的浏览量、视频网站视频的播放数、限制请求等。

6.社交网络场景,利用Redis的hash、set数据结构可以轻松地实现类似赞/踩,关注/被关注,共同好友等功能。

说到底,Redis只是一个工具,具体怎么用,用来做什么还是取决于程序员,欢迎各位大佬提出各种厉害的使用方案。

------------------------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

使用Redis很重要的一步就是对Redis的配置文件的了解,关于配置文件的学习网上有很多介绍,这里就不再赘述。

------------------------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

接下来就是一些关于Redis的面试题,偏理论方面一点,参考了大佬的文章

------------------------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

清楚Redis的理论知识后,接下来就简单了,C#使用Redis已经有很成熟的开源方案,只需稍作学习即可。

C#操作Redis有很多第三方的插件例如,Nhiredis ,ServiceStack.Redis ,StackExchange.Redis等。其中ServiceStack.Redis和StackExchange.Redis应该算是比较流行的

StackExchange.Redis的学习参考大神的文章:StackExchange.Redis学习StackExchange.Redis用法总结

ServiceStack.Redis的学习参考大神的文章:ServiceStack.Redis学习

明白了理论知识,最后要做的还是多练习,以后有机会再学习Linux使用Docker配置Redis。

 

posted @ 2021-03-14 11:44  松树住松鼠  阅读(179)  评论(0编辑  收藏  举报