redis-入门

redis简介

redis是一款开源的高性能的非关系型数据库(NoSQL, Not only sql)

redis特点

  1. 高性能(在内存中,高IO)
  2. 数据类型丰富
  3. 能够持久化
  4. 支持master-slave模式的备份
  5. 所有操作都是原子性的

redis 数据类型

字符串、列表、散列、集合、有序集合

字符串 String

字符串是Redis最基本的数据类型,一个key对应一个value,一个key最大能存储512MB。

常用字符串命令

SET key value 设置指定 key 的值

SETX key timeout value 设置指定 key 的值及过期时间

GET key 获取指定 key 的值

GETRANGE key start end 截取key中的字符串

GETSET key value 重置key的值,并返回key的旧值(key没有旧值时,返回nil)

SETBIT key offset value 设置key所存储的字符串,offset位上的值(offset上的值为0或1)

GETBIT key offset 获取key所存储的字符串,offset位上的值

STRLEN key 返回 key 所存储的字符串的长度

INCRBY key increment 将 key 所存储的值加上特定的增量 increment

DECRBY key decrement 将 key 所存储的值减去特定的减量值 decrement

APPEND key value 如果 key 已经存在,并且是一个字符串,APPEND命令将 value 追加到原value的末尾

特点

自增、自减
位运算

常用应用场景

利用 setbit、getbit、bitcount 统计用户签到、活跃用户
利用 INCR做原子计数器,生成唯一序列号
设置 key 有效期,上操作锁或者防止短时间内频繁发送短信验证

列表

一个列表,包含了N个字符串

常用的指令

LPUSH key string1 往列表左侧插入一个或多个值

RPUSH key string1 往列表右侧插入一个或多个值

LINSERT key BEFORE/AFTER oldString newString 在列表指定元素前(后)插入一个值(元素不存在或列表不存在,则不执行任何操作)

LSET key index string 通过索引设置列表元素的值

LINDEX key sindex 通过索引获取列表中的元素

LLEN key 获取列表的长度

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

LPOP key 移出列表中的第一个元素,并返回移出的元素

RPOP key 移出列表中的最后一个元素,并返回移出的元素

BLPOP key time 移出列表中的第一个元素,并返回移出的元素,如果列表为空,则在time秒之后弹出nil

BRPOP key time 移出列表中的最后一个元素,并返回移出的元素,如果列表为空,则在time秒之后弹出nil

BRPOPLPUSH key1 key2 time 将key1最右侧的元素弹出到key2的最左侧,如果key1没有元素,则等待time秒后,弹出nil

LREM key count string 移除列表中与string相等的元素,共移除count个,如果count大于0,则从表头向表尾搜索,如果count小于0,则从表尾向表头搜索

LTRIM key start stop 只保留start到stop区间的元素,其余元素均移除

特点

有序,自由实现堆、栈的功能
轮询监控
索引取区间

常用应用场景

利用 LTRIM key start stop获取网站最后5个访问用户、最新消息排行榜
利用PUSH POP当成队列,进行多任务处理
利用BRPOPLPUSH key1 key1 time,使用相同的key作为BRPOPLPUSH的两个参数,无限循环整个列表,比如:一个服务器监控程序,并行检查一组网站,确保网站的可访问性
利用BRPOP key time进行事件提醒,在新元素到

哈希

一个哈希数据,里面包含了N对键值对
常用哈希命令

常用的指令

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

HMSET key field1 value1 field2 value2 将多个 field-value(域-值)对设置到哈希表 key 中

HSETNX key field value 当字段 field 不存在时,设置哈希表字段值

HLEN key 获取哈希表中字段的数量

HKEYS key 获取哈希表中所有的字段

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

HMGET key field1 field2 获取所有给定字段的值

HGETALL key 获取哈希表 key 中,所有的字段和值

HVALS key 获取哈希表中所有的值

HEXISTS key field 查看哈希表 key 中,指定的字段是否存在

HINCRBY key field increment 为哈希表 key 中指定字段加上增量 increment

HSCAN key cursor [MATCH pattern] [COUNT count] 分批次遍历哈希表 key 中的键值对,cursor为0时表示开始一次新的遍历,每次遍历返回来的cursor,作为下次遍历的cursor,直至遍历返回的cursor为0时,代表刚好结束一次完整的key遍历

HDEL key field1 field2 删除一个或多个字段

特点

数据结构有明显的层级关系

常用应用场景

存储有层级关系,并且部分数据需要变更的,如用户信息

集合(Set)

一个集合(key),包含了N个集合成员(value)。集合成员是无序的,且是唯一的,一个集合最多可以有2^32 - 1个成员

常用指令

SADD key value1 value2 向集合添加一个或多个成员

SMEMBERS key 获取一个集合中所有的成员

SCARD key 获取集合的成员数

SISMEMBER key member 判断member是否是集合key的成员

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

SRANDMEMBER key [count] 返回集合中一个或多个随机元素

SREM key member1 [member2] 移除集合中一个或多个成员

SDIFF key1 key2 返回 key1相对于key2的差集(key1有,key2没有)

SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在 destination 中(key1有,key2没有)

SINTER key1 [key2] 返回给定所有集合的交集

SINTERSTORE destination key1 [key2]
返回给定所有集合的交集并存储在 destination 中

SUNION key1 [key2] 返回所有给定集合的并集(key1Ukey2)

SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在 destination 集合中

SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合

SSCAN key cursor [MATCH pattern] [COUNT count] 分批次遍历集合 key 中的键值对,cursor为0时表示开始一次新的遍历,每次遍历返回来的cursor,作为下次遍历的cursor,直至遍历返回的cursor为0时,代表刚好结束一次完整的key遍历

特点

唯一性
差集、并集

常用应用场景

利用交并集操作,可以查找共同好友、好友推荐
利用差集操作,可以求出新增用户(例: 利用Redis集合(Set)统计新增用户和次日留存率)
利用唯一性,可以统计网站UV

有序集合(sorted set)

和集合相似(一个key,N个value,value唯一),不同点是每个元素都会关联一个double类型的分数,Redis通过分数为集合成员进行排序

常用指令

ZADD key score1 value1 [score2 value2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数

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

ZCOUNT key min max 计算在指定区间内的成员数

ZINCRBY key increment value 对指定成员加上增量increment

ZINTERSTORE newKey numbers key1 key2 将key1、key2的交集存入newKey中,newKey中元素的分数是key1和key2中分数之和(使用时一定要指定正确的 Key Number)

ZLEXCOUNT key min max 当元素的分数都相等时,此命令返回指定字符区间之内的元素(如:ZLEXCOUNT z1 [a [c 在z1有序集合所有元素分数相同的情况下,返回z1中a~c之间的元素)

ZRANGE key start stop 返回指定索引区间的元素(下标参数start``stop都以0为底)

ZRANGEBYLEX key min max 返回指定字典区间内的元素(例:ZRANGEBYLEX Z1 [a [b返回集合Z1中a到b之间的元素)

ZRANGEBUSCORE key min max 返回指定分数之间的元素

ZRANK key value 返回有序集合中指定元素的索引

ZREM key value 移除有序集合中的指定成员

ZREMRANGEBYLEX key min max删除指定字典区间的元素

ZREMRANGEBYRANK key start stop 删除指定索引区间内的元素

ZREMRANGEBYSCORE key min max 删除指定分数区间的所有元素

ZREVRANGE key start stop 返回指定索引区间内的成员,分数从高到低

ZREVRANGEBYSCORE key max min 返回指定分数区间的成员,分数从高到低

ZREVRANK key member 返回有序集合中指定元素的排名(排名由分数值从大到小排列,分数最大的元素排名为0)

ZSCORE key value 返回指定元素的分数

ZUNIONSTORE newKey numkeys key [key ...] 计算给定的有序集合的并集,并存储在newKey中

ZSCAN key cursor [MATCH pattern] [COUNT count]
分批次遍历有序集合 key 中的键值对,cursor为0时表示开始一次新的遍历,每次遍历返回来的cursor,作为下次遍历的cursor,直至遍历返回的cursor为0时,代表刚好结束一次完整的key遍历

特点

可以按照索引、字典区间、分数区间3个不同的维度取数据、删数据
可以自定义数据的顺序
可求并集、交集

应用场景

带权重的队列(List只是按照时间排序的队列,有序集合可以实现自定义权重的队列)
列出游戏中前100名高分的选手
利用区间取值和排序的功能,可以用做分页

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

推荐阅读更多精彩内容