`
songzhan
  • 浏览: 245983 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

6月21 redis介绍

阅读更多

一、redis 是什么

 

      redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
 
二、redis 好处

               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中。也可以配置选择使用同步或异步方式进行换入换出。

三、redis 可以替代memcached 吗?
memcached和redis都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。在我们团队的项目中,是memcached和redis合用。
相比 memcached:
1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。

        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.0.8.zip

    1. 多线程I/O:Redis 6引入了对多线程的支持,特别是在网络I/O方面,显著提升了处理大量并发请求的能力。 2. LRU淘汰策略优化:改进了LRU(Least Recently Used)算法,使得内存管理更高效。 3. 持久化改进:RDB和...

    redis安装包和redis图形化工具

    6. 配置Redis:复制`redis.conf`到配置目录(如`/etc/redis/`),并根据实际需求修改配置文件。 7. 启动Redis:通过`redis-server /etc/redis/redis.conf`启动服务。 8. 检查运行状态:使用`redis-cli`连接Redis...

    redis视图化工具

    6. 事务管理:支持Redis事务的执行和查看,确保操作的原子性。 7. 备份与恢复:方便地备份Redis数据,并在需要时进行恢复。 8. 配置管理:查看和修改Redis服务器的配置参数,优化性能。 总的来说,这款Redis视图化...

    Redis6.x专项进阶课(解决Redis工作实际问题).rar

    分享视频教程——Redis6.x专项进阶课(解决Redis工作实际问题),2020年11月录制,附源码;本课程以一个实战项目为主线,整合Redis各种问题场景,不断改造项目,以问带学。学完本课后,面对Redis相关问题,你将能够...

    redis windows安装包 3.0.503

    6. 测试Redis服务:为了验证Redis是否成功运行,可以使用Redis客户端工具,如`redis-cli.exe`。在同一命令提示符窗口中输入: ``` redis-cli ``` 接着,你可以尝试进行简单的操作,如`SET key value`和`GET key`...

    redis实现排行榜

    6. 其他优化策略: - 为了防止数据量过大导致内存压力,可以考虑使用 Redis 的过期时间功能,设置排行榜的有效期限。 - 考虑使用 Redis Cluster 或者主从复制来提高系统的可用性和扩展性。 在实际项目中,可以...

    redis3.0 windows 版

    下面将详细介绍Redis 3.0在Windows系统中的安装、配置、使用及一些基本概念。 1. **Redis简介** - Redis是一个内存数据结构存储系统,它可以持久化数据到磁盘,并提供多种数据结构如字符串、哈希、列表、集合和...

    redisplus.zip

    6. **可视化监控**:RedisPlus提供实时监控功能,显示Redis服务器的内存使用情况、CPU占用率、网络I/O等指标,帮助管理员了解系统性能并及时发现潜在问题。 7. **事务处理**:在RedisPlus中,可以创建和执行事务,...

    redislabs/home of Redis

    - **用户规模**:截至2017年2月8日,已有超过6,800家企业的客户使用其企业级服务;此外还有200多家企业客户以及总计60,000多名总客户。 - **产品系列**: - Redise Cloud Private:私有云部署的Redis云服务。 - ...

    redis命令大全

    ### Redis命令大全详解 ...以上是Redis中部分常用命令的详细介绍,包括键管理命令、字符串命令和哈希命令。通过这些命令,可以高效地进行数据的存储和检索操作。后续章节将继续介绍Redis的其他数据类型及其相关的命令。

    Redis 4.x Cookbook中文版

    本书在2018年5月出版,紧跟Redis的发展步伐,为开发者提供了关于最新版本Redis的实用技巧和解决方案。 **Redis核心概念与功能** 1. **数据结构**: Redis支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表...

    Redis-Cluster20161110

    【Redis-Cluster20161110】是一个关于Redis集群的资料包,发布于2016年11月10日。这个压缩包包含了一些用于启动和管理Redis集群的工具,以及Redis服务器的安装文件。让我们深入探讨Redis Cluster及其相关知识点。 *...

    redis2.8.8稳定版本

    6. **命令操作**:Redis提供了一套丰富的命令接口,用户可以通过这些命令进行数据的增删改查操作,如`SET`、`GET`、`LPUSH`、`SADD`等。 7. **发布/订阅(Pub/Sub)**:Redis支持发布/订阅模式,允许客户端订阅感兴趣...

    redis desktop0.9.9

    6. **Redis 事务**:Redis 的事务支持多条命令的原子执行,但不提供复杂的事务处理,如回滚等。 7. **Redis Lua 脚本**:Redis 提供了内建的 Lua 解释器,允许用户通过 Lua 脚本来执行复杂逻辑,增强其功能。 **...

    redis 配置说明文件

    自2010年3月起,Redis的开发工作由VMware负责,确保了其持续的发展和更新。 配置文件是Redis服务的核心组成部分,它定义了Redis服务器的行为和参数。以下是对Redis配置文件的详细解析: 1. **守护进程设置** (`...

    redis-2.8.3.tar.gz

    Redis 2.8.3是Redis的一个重要版本,它在2014年6月11日发布,虽然现在已经有了更新的版本(如2.8.10),但2.8.3仍然具有重要的历史价值和学习意义。该版本引入了许多改进和新特性,包括但不限于以下几点: 1. **...

    php-redis中文帮助手册.zip

    2. Redis客户端库介绍: PHP的Redis扩展提供了与Redis服务器交互的一系列方法,如连接、断开连接、执行命令等。例如,使用`$redis = new Redis()`创建一个Redis实例,`$redis->connect('127.0.0.1', 6379)`连接到...

    Redis的Java客户端Jedis

    在2018年6月10日,Jedis的最新版本为2.9.0,这个版本包含了对Redis各种操作的支持,并且优化了性能,提升了稳定性。 1. **Jedis的基本使用** - **连接Redis服务器**:Jedis通过`Jedis jedis = new Jedis(...

    redis-5.9.101(6.0-rc1)-x64-windows-bin.rar

    Redis 6 RC1 发布了,项目创建人 antirez 在博客中介绍,这是迄今最“企业”化的版本(SSL 与 ACL 等特性与企业极相关),也是最大的版本,同时也是参与人数最多的版本。 GA 版本预计在明年三月到五月之间发布。 ...

    redis4.0.6哨兵模式部署(含安装包).zip

    部署完成后,可以通过`Redis部署日志-2019年6月14日.xlsx`来跟踪和分析部署过程中的事件和性能指标。例如,查看主从同步情况、哨兵状态以及可能的错误信息。 总结,Redis 4.0.6的哨兵模式部署涉及主从复制、哨兵...

Global site tag (gtag.js) - Google Analytics