一、redis 是什么
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis提供了多种value数据结构(现在有字符串/列表/集合/有序集合/哈希,或许将来还会有更多的数据结构)的远程键值存储。
集合和列表的好处不仅仅是可以在服务端进行直接操作,另一个好处也是节约了key占据的空间。
PS:Redis支持key的expire,但是不能为list/set中的一个item设置过期,如果需要的话貌似只能平板化成一级key,这样就丧失了很多特性,这点比较郁闷。
别小看这些丰富的数据结构,如果memcached只能用来做缓存的话,Redis就可以深深地和业务逻辑结合在一起,以高效的方式实现缓存或存储。
比如对于普通的键值存储,我们如果需要为值增加一项需要取出修改保存三个过程,但是现在只需要提交一次追加在头部/添加在尾部操作。
除此之外,Redis还提供其它一些很有用的特性:
1) 事务:允许让一组命令进入队列一次性执行,在执行的过程中不穿插其它命令(Redis的单线程保证)。但是要注意的是,并不能保证队列中操作的key没有 变化(并发环境),可以使用WATCH来监视并在并发时回滚(乐观并发)。当然,Redis中也提供了很多组合型的原子命令(比如检查并添加,删除后添 加,这些组合特别有用)。
2) 管道:一次性提交多个命令(如果只是进行一些设置,命令之间不需要依赖前置命令结果的话,可以提高不少效率)。当然,Redis还提供了很多Multi-的命令,允许一次性进行多个值的添加,获取等等。
3) 持久:有快照和日志两种方式。对于(后台)快照就是在保存的时候开启子进程(当然也可以前台方式)将整个(32G内存的dump过程想想真恐怖?)内存快 照写入临时文件(在此过程中的修改操作为父进程的内存页创建副本,那么最坏的情况可能要多用一倍内存),之后再替换原来的dump文件。所谓日志就是每一 次写操作生成日志(日志的持久化也有每秒/每次和依赖于OS三种方式),适用于不太适合丢失的数据的保存,当然效率也会差。
4) 复制:支持多层次的主从订阅。那么我们就有很多配置方式了,可以让主作为写,从作为运算,可以让主作为内存数据库,从作为持久化的备份。在建立订阅关系之 后,主会把内存映像在后台保存下来然后发动给各个从,并且保存后续的写操作命令,从收到文件后恢复文件中的快照再接受主保存的后续操作命令。
5) VM:操作系统的页过大,Redis默认使用32字节的页。把所有的键保存在内存中,把所有的值压缩(很厉害,保存10G的数据才占用2G不到的存储,我都怀疑我看错了)保存在swap中。也可以配置选择使用同步或异步方式进行换入换出。
2、redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。
3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。
4、redis原生支持的数据类型更多,使用的想象空间更大。
5、而对于性能,Redis作者的说法是平均到单个核上的性能,在单条数据不大的情况下Redis更好。为什么这么说呢,理由就是Redis是单线程运行的。
因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会偏低。因为是单线程运行,所以IO是串行化的,网络IO和内存IO,因此当单条数据太大时,由于需要等待一个命令的所有IO完成才能进行后续的命令,所以性能会受影响。
而就内存使用上来说,目前Redis结合了tcmalloc和jemalloc两个内存分配器,基本上和Memcached不相伯仲。如果是简单且有规律的key value存储,那么用Redis的hash结构来做,内存使用上会惊人的变小,优势是很明显的。
相关推荐
分享视频教程——Redis6.x专项进阶课(解决Redis工作实际问题),2020年11月录制,附源码;本课程以一个实战项目为主线,整合Redis各种问题场景,不断改造项目,以问带学。学完本课后,面对Redis相关问题,你将能够...
从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。[1]在2013年5月之前,其开发由VMware赞助。[2][3]根据月度排行网站DB-Engines.com的数据显示,Redis是最流行的...
redis-window6.0.8
Redis 6 RC1 发布了,项目创建人 antirez 在博客中介绍,这是迄今最“企业”化的版本(SSL 与 ACL 等特性与企业极相关),也是最大的版本,同时也是参与人数最多的版本。 GA 版本预计在明年三月到五月之间发布。 ...
内容概要:redis学习资料包,客户端软件、windows压缩包、Linux源码包。 版本:redis6.x 适合人群:学习Redis或者使用Redis。 介绍:配合主页专栏《Redis从头学》进行学习。
从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。[3]在2013年5月之前,其开发由VMware赞助。[4][5]根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对...
编译时间:2021-9-14 10:30:41 --- fanlinglong releases分支是https://github.com/redis/redis/releases/6.0.15 @oranagra oranagra released this on 22 Jul 2021 (在7月22日发布了这个)
老牌Redis客户端软件,0.9.4版本开始官方不在提供免费的下载。 此为在64位版的windows10下编译后的安装包,编译日期为2018年08月09日。 程序运行依赖visual studio 2015 redistributable,下载地址如下: ...
一、需求 记录用户签到,查询用户签到 ...(1)每个用户每个月单独一条redis记录,如00101010101010,从左往右代表01-31天(每月有几天,就到几天) (2)每月8号凌晨,统一将redis的记录,搬至mysql,记录如图 (3
2014年6月28日 附录:各个原始文件的作用简介 文件 作用 adlist.c , adlist.h 双端链表数据结构的实现。 ae.c , ae.h , ae_epoll.c , ae_evport.c , ae_kqueue.c , ae_select.c 事件处理器,以及各
Redis 5.0.8发布于2020年3月12日16时05分41秒 ============================================ 升级紧迫性高:这个版本修复了安全问题。 这是这个版本的修复列表: Salvatore Sanfilippo在《commit 2bea502d》中...
2014年6月28日 附录:各个原始文件的作用简介 文件 作用 adlist.c , adlist.h 双端链表数据结构的实现。 ae.c , ae.h , ae_epoll.c , ae_evport.c , ae_kqueue.c , ae_select.c 事件处理器,以及各
统一Redis平台(URP) 动机 随着云采用的增加,成本优化已成为... 单个P1 Redis缓存每月的费用约为412美元。 拥有三个微服务,每个服务都利用两个Redis缓存,每月花费约2,412美元。 这种分析促使我们寻找机会将现有的
2.利用Echarts图表框架展示销量排行、月销售额和订单量趋势、商品浏览量和待办事件等 3.商品管理:商品的增删改查,按照名称查找、批量删除 4.订单管理:所有订单查看、删除、修改收货信息、发货,带日期和订单状态...
这个仓库主要用来管理我在分析Redis原始时的一些笔记从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年在2013年5月之前,其开发由VMware赞助。根据月度排行网站DB-Engines.com的数据显示,Redis是...
由杰西卡·兰金斯(Jessica Rankins)在2017年6月15日编辑 目标: 使用Vagrant和Docker在Vagrantfile中配置Docker容器。 将基础结构演示为代码原则(脚本配置和配置环境以确保环境均等)。 网络:从Redis容器将...
java7 hashmap源码 learning-record ...6月21号 《Java并发编程的艺术》 8.3 控制并发线程数的Semaphore 《Java并发编程的艺术》 8.4 线程间交换数据的Exchanger 6月20号 [HashMap,LinkedHashMap,TreeMap的区别]
这是基于ThinkPHP做的一个简单的用户登录及管理的小系统,实现基本的增删改~~
多少次你发现自己在几个月的开发和无数的努力后陷入了毫无性能而言的web应用?多少次你在好奇如果你无法向普通用户传达快与最快的标准,你的客户还应该把你当作专家?多少你听到有关Google和Facebook一些糟糕的对比...
[8]2019年12月2日,Django 3. 0发布 Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库...