PS:原创文章,如需转载,请注明出处,谢谢!
本文地址:http://flyer0126.iteye.com/blog/2250973
一、Redis简介
开源 key-value形式存储 数据结构服务器 与关系型不同之处:sql标准、acid属性、表结构
特点:非关系型、分布式的、开源的、水平扩展的
优势:数据高并发读写、海量数据高效率的存储和访问、对数据的高可扩展性和高可用性
支持数据类型:string、hashes、lists、sets、sorted sets
支持push\pop、add\remove 交\并集、各种不同的排序
保证效率 数据缓存在内存中,周期性将更新数据写入磁盘或将修改操作写入追加的记录文件[数据快照或记录操作]
二、应用场景
1. 应用架构
1.1. 应用程序(Application)直接访问Redis
1.2. 应用程序直接访问Redis,当Redis访问失败时才访问Mysql
2. 适用场合
2.1. 取最新N个数据的操作
2.2. 排行榜应用,取top N 的操作
2.3. 精确设定过期时间的应用
2.4. 计数器的应用
2.5. Uniq操作,获取某段时间所有数据排重值
2.6. 实时系统,反垃圾系统
2.7. Pub/Sub构建实时消息系统
2.8. 构建队列系统
2.9. 缓存
三、常用命令
1. 键值相关命令
expire 设置失效时间
select (0-15)选择数据库
persist key 取消过期时间
randomkey 随机返回key
rename 重命名key
type 返回key的数据类型
2. 服务器相关命令
ping 测试连接是否存活
info 获取服务器信息和统计
flushall 删除所有数据库中的所有key
完整命令目录:
四、高级应用
1. 安全性
设置客户端连接后进行任何其他指令前需要使用的密码
requirepass flyer0126 (redis.conf)
连接后auth授权或者登录时授权
auth flyer0126 || ./src/redis-cli -a flyer0126
2. 主从复制
特点:master可以拥有多个salve;多个slave可以连接同一个master外,还可以连接到其他的slave;主从复制不会阻塞master,在同步数据时,master可以继续处理client请求;提高系统的伸缩性。
主从复制过程:
slave与master建立连接,发送sync同步命令;master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存;后台完成保存后,将文件同步至salve;salve将文件保存到硬盘上。
配置主从服务器:
slave服务器上配置(redis.conf):
slaveof 主机ip 端口 #指定主机的ip及端口 masterauth flyer0126 #指定主机密码(权限)如何判定主从:info (role)
3. 事务处理
对事务的支持比较简单,只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令,当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。
discard 取消当前事务
事务里的某一命令执行错误,整个事务不会回滚。
4. 持久化机制
snapshotting(快照) 默认 保存数据
将内存中数据以快照方式写入到二进制文件中,默认的文件名为dump.rdb,可以通过配置设置自动做快照持久化的方式,可以配置redis在n秒内如果超过m个key的修改就自动做快照。
save 300 10 #300s内如果超过10个key被修改,则发起快照保存。
由于快照方式是在一定间隔时间做一次的,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
Append-only file(aof) 记录操作
比快照方式有更好的持久化性,使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件(appendonly.aof)中保存的写命令来在内存中重建整个数据库内容。
由于os会在内存中缓存write做的修改,不会立即写到磁盘上,这样aof的持久化还是有可能会丢失部分数据的修改。可以通过配置 通过fsync函数强制os写入磁盘的时机。
appendonly yes //启用aof持久化方式 # appendfsync always // 收到命令就写入磁盘,最慢,但是保证完全的持久化 # appendfsync everysec //每秒写入一次,在性能和持久化方面做了折中 # appendfsync no //完全依赖os,性能最好,持久化没保证
5. 发布订阅(Pub/Sub)消息
消息通信模式,主要解决消息发布和消息订阅之间的耦合。
Redis作为pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者通过subscribe命令向redis server订阅自己消息类型,redis将消息类型成为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时,订阅该消息类型的全部client都会收到此消息。
6. 虚拟内存的使用
Redis的虚拟内存与操作系统的虚拟内存不同,但思路和目的相同,暂时将不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。
对于redis,提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。
虚拟内存配置 vm-enabled yes # 开启vm功能 vm-swap-file /tmp/redis-swap #交换出来的value保存的文件路径 vm-max-memory 1000000 #redis使用的最大内存上限 vm-page-size 32 #每个页面的大小32字节 vm-pages 134217728 #最多使用多少页面 vm-max-threads 4 #用于执行value对象换入的工作线程数量
五、图形化管理
Redis Desktop Manager
一款基于Qt5的跨平台Redis桌面管理软件
支持: Windows 7+, Mac OS X 10.10+, Ubuntu 14+
特点: C++ 编写,响应迅速,性能好。但不支持数据库备份与恢复。
项目地址: https://github.com/uglide/RedisDesktopManager
Redis Client
项目简介: 使用Java编写,功能丰富,缺点是性能稍差,网络不好时,会不时断线。
项目地址: https://github.com/caoxinyu/RedisClient
Redis Studio
项目简介: 又一个C++编写的redis管理工具,仅支持windows平台,支持xp操作系统。
项目地址: https://github.com/cinience/RedisStudio
六、示例项目
使用PHP利用Redis做数据库实现的示例项目,主要包括:用户登录、退出、添加、编辑、删除、分页、关注、取消关注等功能,主要目的为熟悉Redis各数据类型的应用。
具体实现代码见附件,为本人简单实现,欢迎拍砖~
相关推荐
在IT行业中,C++与Redis的结合使用是一个常见的实践,特别是在需要高性能数据存储和处理的场景下。...在实际项目中,开发者需要结合这些知识点,编写出高效、稳定的C++代码,实现对Redis数据库的无缝操作。
《Redis数据库从入门到实践》一书旨在提供Redis数据库的基本概念、数据类型、命令及其应用,并通过实战案例来激发读者的实践热情。本书适用于初学者快速上手Redis,也对有一定基础的开发者提供进阶指导。本书是一本...
Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值对存储系统,常用于数据缓存、消息队列以及数据库等场景。它的设计目标是速度快、数据持久化,并且支持多种数据结构,如字符串、哈希表、列表、...
### Redis 数据库基础 #### 一、Redis简介与NoSQL概念 Redis是一种广泛使用的开源内存数据结构存储系统,它可以作为数据库、缓存和消息中间件使用。作为一种NoSQL(Not Only SQL)数据库,Redis提供了非关系型数据...
总之,`C RedisDB`的使用涉及了Redis数据库的基础操作、客户端库的接口调用以及动态链接库的使用技巧。通过理解和掌握这些知识点,开发者可以有效地在C或C++项目中集成Redis功能,提升应用的数据处理能力。
10. **扩展与集群**:对于大规模应用,Redis支持创建集群,将数据分布在多个节点上,提供更高的并发处理能力和容错能力。不过,搭建集群需要更深入的配置和管理。 了解以上知识点,你就能在Windows 64位环境中顺利...
"数据库基础与应用"这个主题涵盖了数据库的基本概念、设计原理以及在实际工作中的应用。在这里,我们将深入探讨这一领域,从理论到实践,帮助你构建扎实的数据库知识体系。 一、数据库基本概念 1. 数据库(Database...
在本场景中,"redis客户端,连接查看redis数据库"指的是使用特定的客户端工具来连接到Redis服务器,以便管理和操作存储在Redis中的数据。这里我们主要讨论如何连接Redis数据库以及常用的Redis客户端。 1. **Redis...
Redis是一个高性能的键值数据库,常用于数据缓存和消息队列。它支持丰富的数据类型,包括字符串、哈希表、列表、集合和有序集合。在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)环境中,可以...
在日常操作Redis数据库时,虽然命令行工具提供了基础且强大的功能,但有时候我们更需要一个图形化的界面来更直观地管理和操作Redis。标题提到的“超好用三个Redis数据库客户端工具”就是为此目的而准备的。下面将...
Redis数据库是目前广泛应用的开源内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。v5.0.14是Redis的一个稳定版本,提供了丰富的数据结构支持,如字符串、哈希、列表、集合、有序集合等,以及事务、持久...
在“Redis数据库 v6.2.14.zip”这个压缩包中,包含的是Redis 6.2.14版本的源码和可能的相关文档。 Redis 6.2.14是一个稳定版本,它带来了多项改进和优化,确保了系统的高效运行和数据的安全性。在这个版本中,...
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis是一个key-value存储系统。和...
在“redis数据库 配置28181部署用的”这个主题中,我们主要关注如何配置Redis服务器以便在端口28181上运行。以下是对Redis数据库及其配置和部署的详细说明。 一、Redis简介 Redis(Remote Dictionary Server)是由...
不过,可以从文件的标题、描述以及可能涉及的主题出发,为您详细地阐述关于Redis数据库的一些基础知识及其应用场景等内容。 ### Redis数据库简介 Redis(Remote Dictionary Server)是一款开源的、高性能的键值对...
本案例“redis数据库的练习案例API”涵盖了Redis的主要数据结构和功能,旨在帮助你深入理解和应用Redis。 首先,我们来看Redis中的基础数据结构: 1. **String**:Redis的String是最基本的数据类型,可以存储字符...
总之,"dx-common-redis"工程提供了一个便捷的方式来整合Spring和Redis,使得开发者可以快速在Java项目中使用Redis,同时通过配置可以轻松选择不同的Redis数据库。通过学习和应用这些知识,你可以提升项目的性能,更...
与MySQL不同,Redis是NoSQL数据库,不依赖于固定的表结构,而是以键值对的形式存储数据。这使得Redis在处理大量实时数据和需要快速读写操作的应用场景中表现出色。Redis支持多种数据结构,如字符串、哈希、列表、...
首先,我们需要了解Qt和Redis的基础知识。Qt是一个跨平台的C++图形用户界面库,它提供了丰富的API用于开发桌面、移动和嵌入式应用。而Redis则是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息代理。 ...