1.1基本介绍
- Redis 使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构
- 和 Memcached 类似,它支持存储的 value 类型相对更多,包括 string (字符串)、list (链表)、set (集合)、zset (sorted set –有序集合) 和 hash(哈希类型)
- 在此基础上,Redis 支持各种不同方式的排序。
- 与 memcached 一样,为了保证效率,数据都是缓存在内存中。
- 区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
- 并且在此基础上实现了 master-slave (主从) 同步。Redis Sentinel和Redis Cluster集群架构方案
1.2应用场景
-
分布式缓存,挡在mysql数据库之前的一道屏障
-
内存存储和持久化(RDB+AOF),redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
-
分布式锁
-
队列
Reids提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。
我们常通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比较适合适用。 -
排行榜+点赞
-
高频次,热门访问的数据,降低数据库 IO。
-
分布式架构,做 session 共享。
1.3 相关技术
redis 使用的是单线程 + 多路 IO 复用技术:
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用 select 和 poll 函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
** 串行 vs 多线程 + 锁(memcached) vs 单线程 + 多路 IO 复用 (Redis)**(与 Memcache 三点不同:支持多数据类型,支持持久化,单线程 + 多路 IO 复用) 。
什么是单线程 + 多路 IO 复用
拿买票的例子来说,有1 2 3号人要买票,但是不是自己去火车站买票,而是通过黄牛(redis)进行买票,黄牛去买票是一个单线程的操作,如何体现多路IO复用呢?实际就是1号要黄牛买票,黄牛去买票了,此时黄牛还没有买到,但是1号不用等待,可以继续做其他的事情,黄牛买到票之后通知1号直接来取票就行了,另外2号、3号都是同样的原理,在黄牛买票的同时不需要等待,而是可以去做其它自己的事情就是多路IO复用
1.4 key的操作
● keys * 查看当前库所有key(匹配:keys *1)
● exists key 判断某个key是否存在
● type key 查看你的key是什么类型
● del key 删除指定的key数据
● unlink key 根据value选择非阻塞删除
○ 仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
● expire key 10 10秒钟:为给定的key设置过期时间
● ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
● select 切换数据库
● dbsize查看当前数据库key的数量
● flushdb 清空当前库
● flushall 通杀全部库