🌲 Redis 简介
🌾 什么是Redis
Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库
Redis是互联网技术领域使用最为广泛的存储中间件,它是「Remote DictionaryService」的首字母缩写,也就是「远程字典服务」。Redis以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司都在使用Redis,比如Twitter、YouPorn、暴雪娱乐、Github、StackOverflow、腾讯、阿里、京东、华为、新浪微博等等,很多中小型公司也都有应用。也可以说,对Redis的了解和应用实践已成为当下中高级后端开发者绕不开的必备技能。
🌾 Redis特性
🍁 速度快
正常情况下,Redis?执行命令的速度非常快,官方给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能,但这里先不讨论机器性能上的差异,只分析一下是什么造就了Rdis如此之快的速度,可以大致归纳为以下三点:
- Redistribution所有数据都是存放在内存中
- Redis使用C语言实现的,一般来说,C语言实现的程序距离操作系统更近,执行速度会更快。
- Redis使用了单线程架构,预防了多线程可能产生的竞争问题。
🍁 基于键值对的数据结构服务器
几乎所有的编程语言都提供了类似字典的功能,例如Java里的map、Python.里的dict,类似于这种组织数据的方式叫作基于键值的方式,与很多键值对数据库不同的是,Rdis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)和HIyperLogLogr两种神奇的“数据结构”,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis.3.2版本中加入有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应用。
🍁 丰富的功能
除了5种数据结构,Redis还提供了许多额外的功能:
- 提供了键过期功能,可以用来实现消息系统
- 支持Lua脚本功能,可以利用Lua创造出新的Redis命令
- 提供了简单的事务功能,能在一定程度上保证事务的特性
- 提供了流水线功能,这样客户端能将一批命令一次性传到redis,减少网络的开销
🍁 简单稳定
Redis的简单主要表现在三个方面。首先,Redis的源码很少,早期版本的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行左右,相对于很多oSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员完全可以“吃透”它。其次,Rdis使用单线程模型,这样不仅使得Rdis服务端处理模型变得简单,而且也使得客户端开发变得简单。最后,Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖libeventi这样的系统类库),Redis自己实现了事件处理的相关功能。
Redis:虽然很简单,但是不代表它不稳定。以笔者维护的上千个Redis为例,没有出现过因为Redis自身bug而宕掉的情况。
🍁 客户端语言多
Rdis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,并且由于Redis受到社区和各大公司的广泛认可,所以支持Redis的客户端语言也非常多,几乎涵盖了主流的编程语言,例如Java、PHP、Python、C、C+、Nodejs等
🍁 持久化
通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因此Redisi提供了两种持久化方式:RDB和AOF,即可以用两种策略将内存的数据保存到硬盘中这样就保证了数据的可持久性。
🍁 主从复制
Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。
🍁 高可用和分布式
Redis,从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis节点的故章发现和故障自动转移。R©dis从3.0版本正式提供了分布式实现Redis Cluster,它是Redis.真正的分布式实现,提供了高可用、读写和容量的扩展性。
🌾 Redis可以做什么
Redis的业务应用范围非常广泛,比如掘金技术社区的帖子模块为实例,梳理一下Redis可以用在哪些地方?
🍁 缓存
缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
🍁 排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。
🍁 计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
🍁 社交网络
赞踩、粉丝、共同好友喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。
🍁 消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。
🌲 windows环境下安装Redis
- windows 64位操作系统
- Redis安装包(当前教程版本:5.0.10)
- 点击Redis-x64-5.0.10.msi安装包,选择好安装目录直接下一步傻瓜式安装。
- 安装完毕之后,安装目录中会有如下文件:
文件介绍:
- redis-benchmark.exe 基准测试
- redis-cli.exe # 客户端
- redis-server.exe # 服务器
- redis.windows.conf # 配置文件
windows运行(快捷键:windows 键+R 键),输入【cmd】命令
进入到Redis安装目录输入命令:
redis-server.exe redis.windows.conf
当前版本安装之后会自动将redis服务加入到注册表中,无需再做服务注册
安装图形界面工具:redis-desktop-manager-0.9.3.817.exe
安装过程同样是一直下一步进行安装
安装完毕之后,会打开如图所示界面:
- 首先点击“连接到Redis服务器”
- 然后取好名字,ip地址和端口号就用默认的
- 出现如下界面表名已经成功连上了服务器了
🌲 Redis 基本语法
🌾 key值相关
- TYPE key -- 用来获取某key的类型
- KEYS pattern -- 匹配所有符合模式的key。比如KEYS * 就是列出所有的key
- RANDOMKEY -- 返回一个随机的key
- RENAME oldkey newkey -- 修改key的名字
注意:key是区分大小写的
案例:打开redis客户端,进行如下测试: