为什么使用 Redis ?

Redis是一个高性能的key-value存储系统,支持丰富的数据类型,适用于缓存、消息发布订阅等场景。它相比memcached提供了持久化和主从同步功能。NoSql数据库如Redis在大数据量、高并发下表现优异,其优势包括易扩展、性能高和灵活的数据模型。Redis的使用需要注意并发竞争key、缓存一致性等问题,可以通过事务、分布式锁等方式解决。Redis的过期策略结合了定期删除和惰性删除,确保内存管理。在实际应用中,根据业务需求权衡使用Redis的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis特点

  •  Redis是一个高性能(支持并发11万读8万写)的key-value存储系统。
  • 支持丰富的存储value类型,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
  • Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
  • 虽然运行在内存,同时支持持久化。提供两种方式:1保存到数据文件.rdb安全性高,但对效率有影响。2保存对数据有影响的操作命令到.aof中,保存操作命令的频率可配置,比较灵活,效率高。
  • 支持订阅发布功能(subscribe/publish)
  • Redis 很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。redis基于内存运行并支持持久化的NoSql数据库,是当今最热门的NoSql数据库之一,也被称为数据结构服务器。1.主要是支持持久化  2.支持更多数据结构  3.支持主从同步


memcached和redis的比较

 


为什么要使用NoSql?

 1. 当数据量的总大小一个机器放不下时。

 2. 数据索引一个机器的内存放不下是。

 3. 访问量(读写混合)一个实力放不下时

单机时代模型

如果每次存储成千上万条数据,这样会导致MySql的性能很差,存储和读取速度很慢,然后演变为:

缓存+mysql+垂直拆分方式

cache作为中间缓存,将所有的数据先保存到缓存中,然后在存入mysql中,减小数据库压力,提高效率。

但是当数据再次增加到一个量级,上面的方式也不能满足需求,由于数据库的写入压力增大,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。然后形成了:

主从分离(master-slave)模式

在redis的告诉缓存,mysql的主从复制,读写分离的基础上,这时MySql主库的写压力开始出现瓶颈,而数据量的持续猛增,由于myISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发mysql应用开始使用InnoDB引擎代替MyISAM。然后形成了:

分表分库模式

将变化小的,业务相关的放在一个数据库,变化多的,不相关的放在一个数据库。


NoSql数据库的优势

<
Redis 用法 简单说明ppt 初学者试用。 string: =============================================================================== SET name "John Doe" GET name 批量的读写操作 MSET age 30 sex "male" MGET age sex 存储数字 INCR age INCRBY age 4 GET age DECR age DECRBY age 4 GET age 修改和获取操作 APPEND name " Mr." GET name STRLEN name SUBSTR name 0 3 bit操作 SETBIT bit 10086 1 SETBIT bit 200 1 SETBIT bit 300 1 GETBIT bit 10086 GETBIT bit 100 BITCOUNT bit 设置超时 SETEX key_with_time 10 "same values" ttl key_with_time ttl key_with_time get key_with_time 如果服务器返回 OK ,那么这个客户端获得锁。 如果服务器返回 NIL ,那么客户端获取锁失败,可以在稍后再重试。 第一次成功,第二次失败(nil) set unknown "some data" NX EX 100 set unknown "some data" NX EX 100 key ===================================================================================== keys * SET name huangz EXISTS name DEL name 数据过期设置 SET name "John Doe" TTL name 先用EXISTS命令查看key值是否存在,然后设置了5秒的过期时间 EXISTS name EXPIRE name 5 EXISTS name GET name List ===================================================================================== 基本list操作 LPUSH students "John Doe" LPUSH students "Captain Kirk" LPUSH students "Sheldon Cooper" LLEN students LRANGE students 0 2 LPOP students LLEN students LRANGE students 0 1 LREM students 1 "John Doe" LLEN students LRANGE students 0 -1 多种修改操作 LINSERT students BEFORE "Captain Kirk" "Dexter Morgan" LRANGE students 0 -1 LPUSH students "Peter Parker" LRANGE students 0 -1 LTRIM students 1 3 LLEN students LRANGE students 0 2 LREM students 1 "John Doe" LLEN students LRANGE students 0 1 阻塞行为 确保key都被删除, 为command列表增加一个值,job 列表为空,被跳过,紧接着 command 列表的第一个元素被 DEL job command request LPUSH command "update system..." LPUSH request "visit page" BLPOP job command request 300 BLPOP job command request 300 BLPOP job command request 300 从别的窗口 LPUSH job "aaa" 等待10秒回怎样呢? BLPOP job command request 10 在MULTI/EXEC事务中的BLPOP # 对非空列表进行操作 RPUSH job "programming" MULTI BLPOP job 30 EXEC # 不阻塞,立即返回 # 对空列表进行操作 LLEN job MULTI BLPOP job 30 EXEC #不阻塞,立即返回(nil) SET ===================================================================================== 基本操作 SADD birds crow SADD birds pigeon SADD birds bat SADD mammals dog SADD mammals cat SADD mammals bat SMEMBERS birds SMEMBERS mammals 修改操作 SREM mammals cat SMEMBERS mammals SADD mammals human SMEMBERS mammals SISMEMBER mammals human 集合的子交并补等操作 SINTER birds mammals SUNION birds mammals SDIFF birds mammals Ordered SET ===================================================================================== ZADD days 0 mon ZADD days 1 tue ZADD days 2 wed ZADD days 3 thu ZADD days 4 fri ZADD days 5 sat ZADD days 6 sun ZCARD days ZRANGE days 0 6 ZSCORE days sat ZCOUNT days 3 6 ZRANGE days 0 -1 ZRANGE days 0 -1 WITHSCORES ZREVRANGE days 0 -1 ZREVRANGE days 0 -1 WITHSCORES ZRANGEBYSCORE days 0 6 ZRANGEBYSCORE days 0 6 WITHSCORES ZRANK days sat HASH ===================================================================================== HSET student name "Ganesh" HSET student age 30 HSET student sex "Male" HKEYS student HVALS student HGETALL student HGET student sex HDEL student sex HGETALL student 多值设置 HMSET kid name Akshi age 2 sex Female HMGET kid name age sex 数据库操作 ===================================================================================== DBSIZE # 0 号数据库的 key 数量 SELECT 1 # 切换到 1 号数据库 DBSIZE # 1 号数据库的 key 数量 flushall # 清空所有数据库的所有 key DBSIZE # 不但 1 号数据库被清空了 SELECT 0 # 0 号数据库(以及其他所有数据库)也一样 DBSIZE -在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个 key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。 这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。 Publish/Subscribe ===================================================================================== 用一个客户端订阅管道 SUBSCRIBE channelone 另一个客户端往这个管道推送信息 PUBLISH channelone hello PUBLISH channelone world 用一个客户端订阅所有channel开头的信息通道 PSUBSCRIBE channel* 另一个客户端对两个推送信息 PUBLISH channelone hello PUBLISH channeltwo world 事务性 ===================================================================================== NX结尾命令都是判断在这个值没有时才进行某个命令。 SET name "John Doe" SETNX name "Dexter Morgan" GET name Redis还支持自定义的命令组合,通过MULTI和EXEC,将几个命令组合起来执行 SET counter 0 MULTI INCR counter INCR counter INCR counter EXEC GET counter DISCARD命令来中断执行中的命令序列 SET counter 0 MULTI INCR counter INCR counter INCR counter DISCARD GET counter 持久化 ===================================================================================== 数据快照的原理是将整个Redis中存的所有数据遍历一遍存到一个扩展名为rdb的数据文件中。通过SAVE命令可以调用这个过程。 SET name "John Doe" SAVE SET name "Sheldon Cooper" BGSAVE /home/dong1/redis-2.6.16/src/dump.rdb 其日志文件以aof结局,我们一般各为aof文件。要开启aof日志的记录 你需要在配置文件中进行如下设置: appendonly yes 管理命令 ===================================================================================== Redis支持多个DB,默认是16个,你可以设置将数据存在哪一个DB中,不同DB间的数据具有隔离性。也可以在多个DB间移动数据。 SELECT 0 SET name "John Doe" SELECT 1 GET name SELECT 0 MOVE name 1 SELECT 1 GET name DBSIZE INFO FLUSHDB SET name "John Doe" DBSIZE SELECT 1 DBSIZE SELECT 0 FLUSHDB DBSIZE FLUSHALL DBSIZE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值