Redis-不懂这些基本概念别说你用过

数据类型:

String、list、set、hash、zset、Pub/Sub、Transactions

特性:

1.速度极快。官方给出的数据是 10 万次 ops 的读写,这主要归功于这些数据都存在于内存中。由于 Redis 是开源的,当你打开源代码,就会发现 Redis 都是用 C 语言写的,C 语言是最接近计算机语言的代码,而且只有区区 5 万行,保证了 Redis 的速度。同时一个 Redis 只是一个单线程,其真正的原因还是因为单线程在内存中是效率最高的。

2.持久化。Redis 的持久化可以保证将内存中的数据每隔一段时间就保存于磁盘中,重启的时候会再次加载到内存。持久化方式是 RDB 和 AOF。

3.支持多种数据结构。分别支持哈希、集合、BitMaps,还有位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有 12K,是有一定误差范围的)、GEO(地理信息定位)。

4.支持多种编程语言。支持Java、PHP、Python、Ruby、Lua、Nodejs。

5.功能丰富。如发布订阅、Lua 脚本、事务、Pipeline(管道,即当指令到达一定数量后,客户端才会执行)。

6.简单。不依赖外部库、单线程、只有 23000 行 Code。

7.主从复制。主节点的数据做副本,这是做高可用的基石。

8.高可用和分布式。Redis-Sentinel(v2.8)支持高可用,Redis-Cluster(v3.0)支持分布式。

使用场景:

1.缓存系统。这是 Redis 使用最多的场景。Redis 能够替代 Memcached,让你的缓存从只能存储数据变得能够更新数据,因此你不再需要每次都重新生成数据。

2.计数器。如转发数、评论数,有了原子递增(Atomic Increment),你可以放心的加上各种计数,用GETSET重置,或者是让它们过期。

3.消息队列系统。虽然 Kafka 更强,但是简单的可以使用 Redis。运行稳定并且快速,支持模式匹配,能够实时订阅与取消频道。

4.排行榜及相关问题。实际就是一种有序集合。

5.社交网络。Redis 可以非常好地与社交网络相结合,如新浪微博、Twiter等,比如QQ和用户交互的时候,用户和状态消息将会聚焦很多有用的信息,很多交互如实时聊天就是通过 Redis 来实现的。

6.按照用户投票和时间排序。Reddit 的排行榜,得分会随着时间变化。LPUSH 和 LTRIM 命令结合运用,把文章添加到一个列表中。一项后台任务用来获取列表,并重新计算列表的排序,ZADD 命令用来按照新的顺序填充生成列表。列表可以实现非常快速的检索,即使是负载很重的站点。

7.过期项目处理。通过 Unix 时间作为关键字,用来保持列表能够按时间排序。对 currenttime 和 timeto_live 进行检索,完成查找过期项目的艰巨任务。另一项后台任务使用 ZRANGE...WITHSCORES 进行查询,删除过期的条目。

8.实时系统。使用位图来做布隆过滤器,例如实现垃圾邮件过滤系统的开发变的非常容易。

常用命令:

1.字符串 String

GET、SET 和DEL

这是 Redis 最简单的命令,如果你要得到一个 value 的值,只需要 GET key,就 ok 了。如果你要设置某个 key 的值,那就 SET key value,搞定。

INCR、DECR、INCRBY、DECRBY

INCR key:就是 key 自增 1,不存在,自增后 get(key)=1;

DECR key:就是 key 自减 1,不存在,自减后返回 -1;

INCRBY key k:自增 k ,不存在,则返回 k;

DECRBY key k:自减 k 。

SET、SETNX、SET xx

SET key value:不管 key 是否存在,都设置;

SETNX key value:key 不存在,才设置(相当于 add);

SET key value xx:key 存在,才设置(相当于 update)。

MGET、MSET

MGET key1 key2 key3 ...:批量获取 key,原子操作;

MSET key1 val2 key2 val2 key3 val3:批量设置 key-value。

实际开发的过程中,我们通常使用 MGET,因为 MGET 只有 1 次网络时间和 n 次命令时间。但是如果你使用 GET 的话,就是 n 次网络时间和 n 次命令时间。

GETSET、APPEND、STRLEN

GETSET key newvalue:set key newvalue 并返回旧的 value,旧的 value 会被删除;

APPEND key value:将 value 追加到旧的 value 上;

STRLEN key:返回字符串的长度(注意中文)。

INCRBYFLOAT、GETRANGE、SETRANGE

INCRBYFLOAT key 3.5:在 key 上追加对应的值 3.5;

GETRANGE key start end:获取字符串指定下标所有的值;

SETRANGE key index value:设置指定下标所有对应的值。

2.哈希 Hash:相当于 value 是一个 Map,里面的所有属性我们都可以单独新增、修改或者删除,而不需要像字符串那样全部覆盖操作。

HGET、HSET、HGETALL

HGET key field:获取存储在哈希表中指定字段的值。

HSET key field value:将哈希表 key 中的字段 field 的值设为 value。

HGETALL key:获取在哈希表中指定 key 的所有字段和值,生产环境不常用。

3.列表 List

LPUSH、RPUSH、LPOP、RPOP、LRANGE

LPUSH key value1 [value2]:将一个或多个值插入到列表头部;

RPUSH key value1 [value2]:在列表中添加一个或多个值;

LPOP key:移出并获取列表的第一个元素;

RPOP key:移除并获取列表最后一个元素;

LRANGE key start stop:获取列表指定范围内的元素。

4.集合 Set

SADD、SCARD、SNENVERS、SPOP

SADD key member1:向集合添加一个或多个成员;

SCARD key:获取集合的成员数;

SMEMBERS key:返回集合中的所有成员;

SPOP key:移除并返回集合中的一个随机元素。

5.Sorted Set 有序集合:和 Set 最大的不同是Sorted Set是自动排序的。

ZADD、ZRANGE、ZREM、ZCARD

ZADD key score1 member1:向有序集合添加一个或多个成员,或者更新已存在成员的分数;

ZRANGE key start stop:通过索引区间返回有序集合成指定区间内的成员;

ZREM key member:移除有序集合中的一个或多个成员;

ZCARD key:获取有序集合的成员数。

6.Pub/Sub 发布订阅:即发布(Publish)与订阅(Subscribe),你可以设定对某一个 key 值进行消息发布及消息订阅,当 key 的值进行了消息发布后,所有订阅它的客户端都会收到相应的消息,这类似于 QQ、微信。

PSUBSCRIBE、PUBSUB、PUBLISH、SUBSCRIBE

PSUBSCRIBE pattern:订阅一个或多个符合给定模式的频道;

PUBSUB subcommand:查看订阅与发布系统状态;

PUBLISH channel message:将信息发送到指定的频道;

SUBSCRIBE channel:订阅给定的一个或多个频道的信息;

UNSUBSCRIBE [channel [channel ...]]:指退订给定的频道。

7.Transactions 事务:Redis 提供了 WATCH 命令,可以对某个 key 来 watch 一下,然后再执行 Transactions。如果这个被Watch 的值进行了修改,那么这个 Transactions 会发现并拒绝执行。

MULTI、EXEC、DISCARD

MULTI:标记一个事务块的开始;

EXEC:执行所有事务块内的命令;

DISCARD:取消事务,放弃执行事务块内的所有命令;

UNWATCH:取消 WATCH 命令对所有 key 的监视;

WATCH key:监视 key,如果在事务执行之前 key 被其他命令所改动,那么事务将被打断。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容