一般项目为了解决什么问题而使用redis
redis是内存数据库,访问速度非常快,所以能够解决的也都是这些缓存类型的问题,如下:
redis一般用来干嘛_redis做什么用的
redis一般用来干嘛_redis做什么用的
1、会话缓存(Session Cache)
常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?
幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。
2、全页缓存(FPC)
除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。
再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。
此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以快速度加载你曾浏览过的页面。
3、队列
Reids在内存存储引擎领域的一大优点是提供 list 和 set 作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的作,就类似于本地程序语言(如Python)对 list 的 push/pop 作。
Redis可以用来做数据库吗
Redis本来就是内存数据库,用来当做计数器,队列等的确很不错,性能高效。但是,但是,但是架构不靠谱下可能使你提心吊胆。
只用Redis作为数据库时,使用时确实很爽,突然来个新需求、数据突然暴增、数据架构迁移的时候就给跪了。
Redis是key-value数据库,面对key的内存搜索,优势明显。
大部分还是要和其他持久化数据库合作使用,就只来说几个注意的场景:
1、Redis-RDB半持久化模式下,非实时,如果一旦断电,丢失一些数据,程序能不能接受、兼容?
2、Redis主要是Key的查询,对于复杂的数据结构,需要其他sql是不是更爽?需要其他关联查询?
3、Redis吃的是纯内存,跟磁盘相比,成本也要计算在内?
4、是否需要支持像银行存取款级别的事务?
5、数据总有“冷”、“热”之分,10亿的冷数据都放Redis显然浪费资源。
性能、成本、可靠性,终是一个权衡的问题。
Redis 已经发展了 2 年多,很多团队已经验证了它是一个靠谱的数据库。 但是它并不通用,使用场景是有限的。
知乎日报的基础数据和统计信息是用 Redis 存储的,这使得请求的平均响应时间能在 10ms 以下。 其他数据仍然需要存放在另外的地方,其实完全用 Redis 也是可行的,主要的考量是内存占用。 就使用经验而言,Redis 的数据结构很丰富,精心设计地话,能满足很多应用场景。至少很多时候比 MySQL 更方便。 更重要的是,它很 cool,开发时有新鲜感。
redis数据类型和应用场景
Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。),Redis数据都是缓存在计算机内存中并且它会周期性的把更新的数据写入磁盘或者把修改作写入追加的记录文件,实现数据的持久化。谈到存储数据,那么必然要涉及到相关的数据类型,redis主要有以下数据类型:
描述:string 是 redis 基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。value其实不仅是String,也可以是数字。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg或者序列化的对象。string 类型是 Redis 基本的数据类型,string 类型的值能存储 512MB。
常用命令:get、set、incr、decr、mget等。
应用场景:规key-value缓存应用。常规计数: 点赞数, 粉丝数。
描述: hash 是一个键值(key => value)对。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
常用命令:hget,hset,hgetall 等。
应用场景:存储部分变更数据,如商品信息等。
描述:list 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
常用命令:lpush(添加左边元素),rpush,lpop(移除左边个元素),rpop,lrange(获取列表片段,LRANGE key start stop)等。
应用场景:消息队列,关注列表,粉丝列表等都可以用Redis的list结构来实现。
描述: set是string类型的无序。是通过hashtable实现的,概念和数学中个的基本类似,可以交集,并集,集等等,set中的元素是没有顺序的。所以添加,删除,查找的复杂度都是O(1)。
常用命令:sadd,spop,embers,sunion 等。
应用场景:交集,并集,集(微博中,可以将一个用户所有的关注人存在一个中,将其所有粉丝存在一个。Redis还为提供了求交集、并集、集等作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的中)
描述:zset 和 set 一样也是string类型元素的,且不允许重复的成员。不同是可以打分(排序)
常用命令:zadd,zrange,zrem,zcard等
应用场景:排行榜,带权重的消息队列
描述:Bitmaps这个“数据结构”可以实现对位的作。 把数据结构加上引号主要因为:
Bitmaps本身不是一种数据结构, 实际上它就是字符串 , 但是它可以对字符串的位进行作。
Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。其实大多数Bitmaps的应用场景可以用其他数据类型来实现,用Bitmaps主要是存储空间占用特别少
常用命令:getbit key offset;setbit key offset value
应用场景:统计用户访问,统计电影某天的的播放量
描述:Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像那样,返回输入的各个元素。这类数据结构的基本大的思路就是使用统计概率上的算法,牺牲数据的精准性来节省内存的占用空间及提升相关作的性能
常用命令:pfadd, pfcount,pfmerge
应用场景:统计网站的每日UV
描述:GEO功能在Redis3.2版本提供,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能.geo的数据类型为zset.
常用命令:geoadd,geo, geodist
应用场景:附近位置、摇一摇
参考列表:
Redis五种数据类型及应用场景
Redis是什么,用来做什么
Redis是一个开源的使用ANSI C语言编写、支持网络、
可基于内存亦可持久化的日志型、
Key-Value数据库,并提供多种语言的API。
redis是将数据存储在内存中的高速缓存,key-value类型的,nosql数据库。用来分担数据库的I/O压力,提高数据访问速度。
具体可以查看
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary (远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
众多语言都支持Redis,因为Redis交换数据快,在中常用来存储一些需要频繁调取的数据,节省内存开销,也提升了速度。将一些热点数据存储到Redis中,要用的时候,直接从内存取,提高了速度和节约了的开销。
1、会话缓存(常用)
2、消息队列(支付)
3、活动排行榜或计数
4、发布,消息(消息通知)
5、商品列表,评论列表
Redis应用场景?
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set()和zset(有序)。这些数据类型都支持push/pop、add/remove及取交集并集和集及更丰富的作,而且这些作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改作写入追加的记录文件,并且在此基础上实现了-sle(主从)同步
Replication(树形)
data types(String、Lists、Sorted Sets、Hashes) persistence (snapshot、aof)
很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。但是测试结果基本是Redis占优势。一直在思考这个原因,目前想到的原因有这几方面。
Libnt。和Memcached不同,Redis并没有选择libnt。Libnt为了迎合通用性造成代码庞大(目前Redis代码还不到libnt的1/3)及牺牲了在特定平台的不少性能。Redis用libnt中两个文件修改实现了自己的epoll nt loop(4)。业界不少开发者也建议Redis
做高速缓存,和去中心化场景可以用