What:
支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
1、redis基于内存,可支持持久化。
基于内存:使存取数据更快速。支持持久化:服务器宕机、意外关机,数据不会丢失。
2、支持多种数据类型:较其他缓存,redis支持存储丰富的数据结构:string、Hashes、list、sets、sorted sets与范围查询:bitmaps、hyperloglogs和geospatial索引半径查询。
丰富的功能:
3、支持事务:
事务可以一次执行多个命令, 并且带有以下两个重要的保证:
@H_301_43@事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
EXEC命令负责触发并执行事务中的所有命令:
@H_301_43@4、pub/sub
订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者)。而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的。这种发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑。
这也是redis可以作为消息中间件的基础
5、LUA脚本(暂时略过)
我们可以设置key的过期时间,超过时间后,将会自动删除该key。该功能在应用中很实用。如:
案例: Navigation session
想象一下,你有一个网络服务器,你对用户最近访问的N个网页感兴趣,每一个相邻的页面设置超时时间为60秒。在概念上你为这些网页添加Navigation session,如果你的用户,可能包含有趣的信息,他或她正在寻找什么样的产品,你可以推荐相关产品。
你可以使用下面的策略模型,使用这种模式:每次用户浏览网页调用下面的命令:
MULTI RPUSH pagewviews.user:<userid> http://..... EXPIRE pagewviews.user:<userid> 60 EXEC
如果用户60秒没有操作,这个key将会被删除,不到60秒的话,后续网页将会被继续记录。
后面还会总结自动删除key的应用场景7、内存回收
回收策略:
@H_301_43@这要与redis的主从集群结合:
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
@H_301_43@应用场景:
大的方面:redis可以作为缓存、数据库、MQ
具体的一些示例场景如:
a、 取最新N个数据的操作:
LPUSH latest.comments<ID>命令,向list集合中插入数据
插入完成后用LTRIM latest.comments 0 5000 命令使其永远只保存最新的5000个ID
b、排行榜、TOP10
这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重,比如按订的次数,这时候需要我们的sorted set 出马了,将你要排序的值设置成sorted set 的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。
c、需要精准设定过期时间
比如你可以把上面说到的sorted set 的score值设置成过期时间的时间戳,那么就可以简单的通过时间排序,定时清空过期数据了,不仅是清除Redis中的过期数据,你完全可以把Redis里这个过期时间当成是对数据库中数据的索引,用Redis来找出哪些数据需要过期删除,然后再精准地从数据库中删除相应的记录。
了解一下什么是Redis,适用于什么场景,今后遇到这样的业务,能想到Redis就好了~~~
原文链接:https://www.f2er.com/nosql/203454.html