`
Josh_Persistence
  • 浏览: 1651542 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

一、Java内存数据库实践之深入浅出Redis - Redis介绍

阅读更多

一、什么叫Redis?

 

Redis的全称是:Remote Dictionary Server

 

二、Redis的基本介绍:

 

    redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。

    redis中的“半持久化模式”和“全持久化模式”

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。它提供了Java,Python,Ruby,Erlang,PHP客户端,使用很方便。

 

三、 Redis与其他key-value存储有什么不同?

 

主要有以下两个方面。

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

 

四、Redis是单线程的,怎么提高多核CPU的利用率?

       CPU不太可能是Redis的瓶颈,一般内存和网络才有可能是。 例如使用Redis的管道(pipelining)在liunx系统上运行可以达到500K的RPS(requests per second) ,因此,如果您的应用程序主要使用O(N) 或者O(log(N)) 的 命令,他们几乎不需要使用什么CPU。

       然而,为了最大限度的使用CPU,可以在同一个服务器部署多个Redis的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的,所以,如果你想使用多个CPU,你可以考虑一下分片(shard) 。。

在Redis的客户端类库里面,比如RB(Ruby的客户端)和Predis(最常用的PHP客户端之一),能够使用一致性哈希(consistent hashing)来处理多个Redis实例。

 

五、一个Redis实例最多能存放多少的keys,List、Set、Sorted Set他们最多能存放多少元素?

      理论上Redis可以处理多达232的keys,并且在实际中进行了测试,每个实例至少存放了2亿5千万的keys。我们正在测试一些较大的值。任何list、set、和sorted set都可以放232个元素。换句话说,Redis的存储极限是系统中的可用内存值。

 

六、如果数据集需要使用非常大的内存,但不希望使用一致性哈希或其他方式将数据集分布在不同的节点,还能采用Redis吗?

      一个可行的方案是同时使用传统数据库(Mysql或者其他的)和Redis,Redis里面存放状态信息(元数据,小但经常写的信息)和所有其他读写频繁的数据:用户身份验证token, 使用Redis List 存放与时间顺序有关的id列表、编码等等。然后使用MySQL(或其他)作为存储引擎来存放更大的数据, 创建一个自增长ID作为主键和一个较大的BLOB字段作为数据字段,访问MySQL的数据只能通过主键(ID) 。执行查询操作时,通过Redis读取数据, 但是当有读取大数据时需要通过主键(ID)访问MySQL数据库。

 

七、Redis的优点:

     性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
     丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
     原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
     丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

 

下面是官方的bench-mark数据:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
文本执行使用loopback接口(127.0.0.1)。
结果:写的速度是110000次/s,读的速度是81000次/s 。

 

八、redis常用命令:

就DB来说,Redis成绩已经很惊人了,且不说memcachedb和tokyocabinet之流,就说原版的memcached,速度似乎也只能达到这个级别。Redis根本是使用内存存储,持久化的关键是这三条指令:SAVE BGSAVE LASTSAVE .

当接收到SAVE指令的时候,Redis就会dump数据到一个文件里面。值得一说的是它的独家功能:存储列表和集合,这是它与mc之流相比更有竞争力的地方。
不介绍mc里面已经有的东东,只列出特殊的:
TYPE key — 用来获取某key的类型
KEYS pattern — 匹配所有符合模式的key,比如KEYS * 就列出所有的key了,当然,复杂度O(n)
RANDOMKEY - 返回随机的一个key
RENAME oldkeynewkey— key也可以改名
列表操作,精华
RPUSH key string — 将某个值加入到一个key列表头部
LPUSH key string — 将某个值加入到一个key列表末尾
LLEN key — 列表长度
LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的分页查询那样
LTRIM key start end — 只保留列表中某个范围的值
LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度
LSET key index value — 设置列表中某个位置的值
LPOP key
RPOP key — 和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列来使用了
集合操作
SADD key member — 增加元素
SREM key member — 删除元素
SCARD key — 返回集合大小
SISMEMBER key member — 判断某个值是否在集合中
SINTER key1 key2 ... keyN — 获取多个集合的交集元素
SMEMBERS key — 列出集合的所有元素
还有Multiple DB的命令,可以更换db,数据可以隔离开,默认是存放在DB 0

 

 

下一篇讲介绍:Redis的安装于配置。

 

6
1
分享到:
评论
5 楼 Josh_Persistence 2014-06-11  
finallygo 写道
文章的问题很多
"问题是这个项目还很新,可能还不足够稳定,而且没有在实际的一些大型系统应用的实例。"
在2012年的时候就有很多公司开始使用了,而现在更不用说了,我说知道的公司就有新浪微博,搜狐,腾讯,爱奇艺等,基本上redis已经作为互联网业界的标配了

"此外,缺乏mc中批量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。"
楼主你不知道有mget的命令么?? 另外就算有些命令没有提供批量获取的,可以通过pipline来实现

谢谢指正。我已经改正。
4 楼 josico 2014-06-11  
支持系列文章  顶一个再说    
3 楼 finallygo 2014-06-10  
文章的问题很多
"问题是这个项目还很新,可能还不足够稳定,而且没有在实际的一些大型系统应用的实例。"
在2012年的时候就有很多公司开始使用了,而现在更不用说了,我说知道的公司就有新浪微博,搜狐,腾讯,爱奇艺等,基本上redis已经作为互联网业界的标配了

"此外,缺乏mc中批量get也是比较大的问题,始终批量获取跟多次获取的网络开销是不一样的。"
楼主你不知道有mget的命令么?? 另外就算有些命令没有提供批量获取的,可以通过pipline来实现
2 楼 kawin_zhao 2014-06-10  
关注!   
1 楼 Tyrion 2014-06-09  
,LZ继续

相关推荐

    Redis-x64-3.2.100.rar

    总的来说,Redis-x64-3.2.100为Windows 64位系统提供了一个强大的键值存储解决方案,无论是在开发环境还是生产环境中,都能发挥其高效、灵活的优势,提升应用程序的性能。安装和使用时,根据实际需求调整配置,确保...

    《Redis 开发与运维》1

    《Redis 开发与运维》是付磊和张益军合著的一本关于Redis数据库的专著,这本书深入浅出地介绍了Redis的使用、管理和优化。Redis是一个高性能的键值存储系统,广泛应用于缓存、消息队列、计数器等多种场景。 在初识...

    java+数据库面试题

    - **问题解答策略**:清晰逻辑、简洁表达、深入浅出地解释技术概念。 - **案例分享**:提供项目经验,展示实际解决问题的能力。 - **自我学习能力**:展示持续学习新技术的热情和自学能力。 - **团队协作**:...

    spring-data-redis_exm

    《深入浅出Spring Data Redis:连接池与事务实践》 Spring Data Redis是Spring框架的一个重要模块,它为Redis提供了丰富的支持,使得在Java应用中使用Redis变得更加便捷。本篇文章将详细探讨Spring Data Redis的...

    狂神study+redis.zip

    "狂神":狂神是IT教育领域的知名人物,以其深入浅出的讲解风格和丰富的实战经验受到广大开发者欢迎,他的教程通常涵盖各种技术主题,包括编程语言、框架和数据库等。 "nosql":NoSQL(Not Only SQL)指的是非关系型...

    深入浅出Spring Boot 2.x(杨开振著)项目代码

    《深入浅出Spring Boot 2.x》是杨开振先生撰写的一本关于Spring Boot的权威指南,这本书旨在帮助读者深入理解并熟练运用Spring Boot 2.x框架。在压缩包文件中,包含了从第一章到第十七章的所有项目源码,这为读者...

    《Redis实战》红丸出品

    在《Redis实战》这本由红丸出品的书中,作者深入浅出地介绍了多种Key-Value存储系统,包括Voldemort、Dynamo、memcachedb、Cassandra、memcached以及Hypertable等。这些系统各有千秋,在不同的场景下展现出了各自的...

    深入浅出学Shiro

    - **JdbcRealm**:默认的 Realm 类型之一,使用 JDBC 连接到数据库查询用户信息。 - **自定义 Realm**:可以根据需求创建自己的 Realm 实现,以适应更复杂的业务逻辑。 #### 七、Shiro 的 Session 管理 Shiro ...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    ├─面试必问-微服务架构深入浅出讲解springcloud │ 微服务架构 --深入浅出讲解springcloud.mp4 │ ├─面试必问-教你手写MyBatis框架 │ 一小时教你手写MyBatis框架.mp4 │ ├─面试必问-架构杀手锏——java混乱...

    大型网站系统与Java中间件实践(手动制作的目录)

    其次,本书对Java中间件进行了深入浅出的讲解。中间件是大型网站系统中的关键组成部分,它们为应用程序提供各种功能和服务,如消息队列、缓存、数据库连接池、调度任务等。作者详细介绍了这些中间件如何解决实际开发...

    2021最新java面试合集pdf.rar

    深入浅出Redis.pdf 爱奇艺2021Java方向笔试题.docx 爱奇艺2021Java方向笔试题(第一场).docx 看透springMvc源代码分析与实践.pdf 网易2021招聘笔试- 系统开发研发工程师(提前批).docx 网易2021笔试- Java 开发...

    数据库基础

    根据给定的文件信息,下面详细解释了数据库基础相关的知识点: 数据库是什么?...《深入浅出学Oracle》作为教程详细地讲解了如何使用Oracle数据库进行开发,是学习数据库管理和应用开发的重要资料。

    个人学习编程的知识库,里面包含了Java核心基础、并发、虚拟机、设计模式、数据结构与算法、各类组件(Redis、My.zip

    My通常指的是MySql,是最广泛使用的开源关系型数据库之一,学习这两者的使用和优化策略对提升系统的性能和稳定性有着直接的影响。 这个压缩包中的“kwan1117”可能是一个目录或者笔记文件,里面可能详细记录了学习...

    你不可错过的Java学习资源清单

    《Java编程思想》(Thinking in Java)是一本经典之作,作者Bruce Eckel深入浅出地介绍了Java的各种概念,适合初学者和有经验的开发者。这本书不仅讲解了基本语法,还探讨了面向对象编程的设计原则和实践。 《Java...

    新手学习Java对Redis简单操作

    本篇文章将深入浅出地介绍如何使用Java进行Redis的基本操作。 Redis是一个开源的内存数据结构存储系统,它可以作为数据库、缓存和消息代理来使用。它支持的数据结构包括字符串、哈希、列表、集合、有序集合等多种...

    Java中间件实践

    总的来说,《Java中间件实践》深入浅出地介绍了这些技术,对于想要在Java领域深化技能的开发者来说,是一本不可多得的宝典。通过学习和实践,你可以更好地理解和运用这些中间件,提升自己的开发能力,为构建大型、高...

    nothing2

    总的来说,《Redis Cookbook》是一本深入浅出的Redis学习资料,适合各个层次的读者。无论是初学者还是经验丰富的开发者,都能从中受益,提升自己在实际项目中运用Redis的能力。通过阅读此书,读者不仅可以掌握Redis...

    分布式java应用_林昊_电子版

    林昊,作为知名的Java技术专家,他的著作《分布式Java应用》深入浅出地讲解了如何在Java环境中构建和优化分布式系统。 本书可能涵盖以下关键知识点: 1. **分布式系统基础**:介绍分布式系统的基本概念,包括...

    Java常见面试题208道.docx

    Java开发者需要对基础知识、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、消息中间件如RabbitMQ和Kafka、分布式协调...

    Web数据库技术应用教程

    《Web数据库技术应用教程》是一份专为WEB初学者设计的教育资源,旨在深入浅出地讲解如何在Web环境中集成和应用数据库技术。本教程将带领读者了解Web数据库的基础概念、核心技术以及实际应用,帮助初学者快速掌握这一...

Global site tag (gtag.js) - Google Analytics