初识Redis(一):Redis简介及数据类型

Redis简介

Redis是一款开源免费、高性能的非关系型数据库

非关系型数据库(Not Only SQL): 简称是NoSQL,一般我们习惯解释成非关系型数据库,其实应该理解成不止是关系型数据库,或者超关系型数据库。一般用来存储不规范、复杂的数据形式。相比关系型数据库,非关系型数据库性能更好,扩展性更强,但是对于财务,金融,银行等规模巨大,流程规范,数据格式统一的行业来讲,使用关系数据库更佳。

Redis特点

  • 数据类型丰富
  • 支持master-slave模式的数据备份
  • 支持数据持久化,可将内存中的数据保存在磁盘
  • 性能极高
  • 所有操作都是原子性操作

原子性操作: A账户有3000块钱,B账户有2000块钱,现在从A账户向B账户转1000块钱,要做如下两个操作: 1. 从A账户中减去1000块钱,那么A账户现在有2000块钱;2. B账户加上1000块钱, 那么B账户现在有3000块钱。如果在A账户减去1000块钱的时候,忽然发生了意外,比如停电、断网之类的,导致转账这个操作中止了,此时A账户的钱已经减去了,但是B账户没有增加1000块钱,那么我们就称这个操作失败了,要进行回滚。回滚就是回到没转账之前的状态,此时A账户照常有3000块,B账户有2000块。

这种要么一起成功(A账户减少1000块,B账户增加1000块),要么一起失败(A、B账户都回到原来状态,A有3000块钱,B有2000块钱)的操作就叫原子性操作。

Redis安装

  1. 下载Redis源码

    redis-3.2.1

  2. 解压

    tar xzvf redis-3.2.1.tar.gz

  3. 编译安装

    cd redis-3.2.1
    make && make install

ps:遇上 `Hint: It's a good idea to run 'make test';` ,我们可以先安装tcl工具 `yum install tcl` ,然后执行 `make test` 进行检测。得到 `\o/ All tests passed without errors!` 的提示,就说明安装成功。
  1. 默认安装的路径

    Redis客户端: /usr/local/bin/redis-cli

    Redis服务端: /usr/local/bin/redis-server

  2. 启动Redis

    启动Redis服务:[root@CentOS6 /]# redis-server

Redis配置密码

  1. 不重启Redis,设置密码

    127.0.0.1:6379> config set requirepass 123456
    OK
    127.0.0.1:6379> 
    127.0.0.1:6379> config get requirepass
    (error) NOAUTH Authentication required.
    
  2. 修改配置文件,设置密码

    redis.conf 配置文件中修改密码,#requirepass foobared, 去掉前面的注释,并设置自己的密码,保存配置文件并重启

    ps:重启的时候一定需要指定修改后的配置文件,否则密码设置不起效

Redis数据类型

Redis数据类型

字符串

字符串是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 统计用户签到、活跃用户(注意:bitcount的start、end参数指的是字符串的位置,不是对应位的位置)
  • 利用 INCR做原子计数器,生成唯一序列号
  • 设置 key 有效期,上操作锁或者防止短时间内频繁发送短信验证

哈希

一个哈希数据,里面包含了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遍历(cursor类似接力棒,从0到0代表一次完整的遍历。HSCAN命令并且有match匹配功能

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

特点
  • 数据结构有明显的层级关系
常用应用场景
  • 存储有层级关系,并且部分数据需要变更的,如用户信息

列表

一个列表,包含了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 timekey1最右侧的元素弹出到key2的最左侧,如果key1没有元素,则等待time秒后,弹出nil
  • LREM key count string 移除列表中与string相等的元素,共移除count个,如果count大于0,则从表头向表尾搜索,如果count小于0,则从表尾向表头搜索
  • LTRIM key start stop 只保留startstop区间的元素,其余元素均移除
特点
  • 有序,自由实现堆、栈的功能
  • 轮询监控
  • 索引取区间
常用应用场景
  • 利用 LTRIM key start stop获取网站最后5个访问用户、最新消息排行榜
  • 利用PUSH POP当成队列,进行多任务处理
  • 利用BRPOPLPUSH key1 key1 time,使用相同的key作为BRPOPLPUSH的两个参数,无限循环整个列表,比如:一个服务器监控程序,并行检查一组网站,确保网站的可访问性
  • 利用BRPOP key time进行事件提醒,在新元素到达时立即处理,新元素未到达一直阻塞住,避免轮询占用资源

集合(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遍历(cursor类似接力棒,从0到0代表一次完整的遍历。SSCAN命令并且有match匹配功能
特点
  • 唯一性
  • 差集、并集
常用应用场景

有序集合(sorted set)

和集合相似(一个key,N个valuevalue唯一),不同点是每个元素都会关联一个double类型的分数,Redis通过分数为集合成员进行排序
  • ZADD key score1 value1 [score2 value2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
  • ZCARD key 获取有序集合的成员数
  • ZCOUNT key min max 计算在指定区间内的成员数
  • ZINCRBY key increment value 对指定成员加上增量increment
  • ZINTERSTORE newKey numbers key1 key2key1``key2的交集存入newKey中,newKey中元素的分数是key1key2中分数之和(使用时一定要指定正确的 Key Number)
  • ZLEXCOUNT key min max 当元素的分数都相等时,此命令返回指定字符区间之内的元素(如:ZLEXCOUNT z1 [a [cz1有序集合所有元素分数相同的情况下,返回z1中a~c之间的元素)
  • ZRANGE key start stop 返回指定索引区间的元素(下标参数start``stop都以0为底)
  • ZRANGEBYLEX key min max 返回指定字典区间内的元素(例:ZRANGEBYLEX Z1 [a [b返回集合Z1ab之间的元素)
  • 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遍历(cursor类似接力棒,从0到0代表一次完整的遍历。ZSCAN命令并且有match匹配功能
特点
  • 可以按照索引、字典区间、分数区间3个不同的维度取数据、删数据
  • 可以自定义数据的顺序
  • 可求并集、交集
应用场景
  • 带权重的队列(List只是按照时间排序的队列,有序集合可以实现自定义权重的队列)
  • 列出游戏中前100名高分的选手
  • 利用区间取值和排序的功能,可以用做分页
附上一个Redis命令在线操作的地址 Redis命令在线操作地址

如果这篇文章对你有帮助,请点个赞哈,感谢

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

推荐阅读更多精彩内容

  • phpredis是php的一个扩展Redis::__construct构造函数$redis = new Redis...
    hello大象阅读 760评论 0 2
  • PHP-redis中文文档 phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务...
    神秘者007阅读 2,715评论 0 2
  • phpredis是PHP的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用;以下是redis...
    史史小子阅读 327评论 0 2
  • Redis::__construct构造函数$redis = new Redis(); connect, open...
    bycall阅读 1,395评论 0 2
  • 我是土生土长的山西人,在千禧年时来到2000多公里外的东北城市—长春,读书,工作,安身立命。在这里已经度过了...
    凡心素语阅读 357评论 1 1