Redis简介

一、Redis安装

1:去官网下载最新的版本:http://redis.io/download

2:解压后,进入解压好的文件夹

3:redis的安装非常简单,因为已经有现成的Makefile文件,所以直接先make,然后make install就

可以了

4:安装的位置在/usr/local/bin ,有:

(1)redis-benchmark:性能测试工具,测试Redis在你的系统及配置下的读写性能

(2)redis-check-aof:用于修复出问题的AOF文件

(3)redis-check-dump:用于修复出问题的dump.rdb文件

(4)redis-cli:Redis命令行操作工具

(5)redis-sentinel:Redis集群的管理工具(哨兵机制实现)

(6)redis-server:Redis服务器启动程序

5:启动Redis的时候,只有一个参数,就是指定配置文件redis.conf的路径。redis.conf在解压的文

件夹里面有,复制一个出来,按需修改即可,也可--port来指定端口

6:连接Redis并操作,使用redis-cli,如果有多个实例,可以redis-cli -h 服务器ip -p 端口

7:关闭Redis,redis-cli shutdown,如果有多个实例,可以指定端口来关闭:redis-cli -p 6379

shutdown

Redis的服务器程序采用的是单进程模型来处理客户端的请求。对读写等事件的响应

是通过对epoll函数的包装来做到的。

Redis的实际处理速度完全依靠主进程的执行效率,假如同时有多个客户端并发访问

服务器,则服务器处理能力在一定情况下将会下降。假如你要提升服务器的并发能力,那

么可以采用在单台机器部署多个redis进程的方式。

二、Redis的数据存储与结构

Redis的数据库简介:

1:Redis每个数据库对外都是以从0开始递增的数字来命名,默认16个数据库,默认使用0号数

    据库,可以使用Select 数字来选择要使用的数据库

2:使用Dbsize可以查看当前数据库的key的数量

3:可以在多个数据库间移动数据,使用move key 目的数据库编号 就可以了

4:使用flushdb可以清除某个数据库的数据

5:Redis不支持自定义数据库名字

6:Redis不支持为每个数据库设置不同的访问密码

7:多个数据库之间并不是完全独立的,FlushAll可以清空全部的数据

8:Redis的数据库更像是一个命名空间

Redis的持久化方式:

Redis持久化分成两种方式:RDB(Redis DataBase)和AOF(Append Only File)

1:RDB是在不同的时间点,将Redis某一时刻的数据生成快照并存储到磁盘上

2:AOF是只允许追加不允许改写的文件,是将Redis执行过的所有写指令记录下来,在下次

Redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了

3:RDB和AOF两种方式可以同时使用,在这种情况下,如果Redis重启的话,则会优先采用AOF

方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高

4:可以关闭RDB和AOF,这样的话,Redis将变成一个纯内存数据库,就像Memcache一样

5:通过配置redis.conf中的appendonly为yes就可以打开AOF功能

RDB

RDB方式,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到

一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。

整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方

式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

RDB的问题

1:fork一个进程时,内存的数据也被复制了,即内存会是原来的两倍

2:每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步脏数

据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可

能会严重影响性能。

Redis的数据结构

1:String:字符串,可以存储String、Integer、Float型的数据 

2:List:字符串List,底层实现是链表(linkedList/zipList),增删快,查找慢

3:Set:字符串Set,无序不可重复,是通过HashTable实现的

4:Hash:按Hash方式来存放字符串,底层是HashTable/ZipList,数据量小使用ZipList

5:ZSet:字符串Set,有序且不可重复,根据Score来排序。底层使用散列表和跳跃

    表来实现,所以读取中间部分数据也很快

三、Redis的常用命令

1:Keys:获得符合规则的键名列表,格式是keys [pattern]  支持glob风格通配符格式:keys act*

(1)? 匹配一个字符

(2)* 匹配任意个字符

(3)[] 匹配中括号内的任一字符,可以用-来表示一个范围

(4)\x 匹配字符x,用于转义符号

2:exists:判断键值是否存在,格式是exists key

3:del:删除key,格式是del key。

小技巧:Del命令不支持通配符,可以结合linux管道和xargs命令来自定义删除,示例如下:redis-cli keys k* | xargs redis-cli del

4:type:获得键值的数据类型,格式是type key

5:rename:改名,格式是rename oldKey newKey

6:renamenx:如果不存在则改名,格式是rename oldKey newKey

String类型的操作命令

1:get、set、del:获取key的值、设置key和值、删除key

2:incr、decr:递增和递减整数值,格式是incr key值

3:incrby、decrby:递增和递减整数值,可指定增减的数值,格式是incrby key值 正负数值

4:incrbyfloat:递增和递减浮点数值,格式是incrbyfloat key值 正负数值

5:append:在尾部追加值,格式是append key值 追加的值

6:getrange:获取指定索引范围内的值,格式是getrange key值 起始索引 结束索引

7:setrange:从索引位置开始设置后面的值,格式是setrange key值 offset索引 值

8:strlen:返回键值的长度,格式是strlen key值

9:mget:同时获得多个键的值,格式是mget 多个key值

10:mset:同时设置多个键值对,格式是mset key值 value , key和value可以多对

11:bitcount:获取范围内为1的二进制位数,格式是bitcount key值 [start end]

12:getbit:获取指定位置的二进制位的值,格式是getbit key值 offset索引

13:setbit:设置指定位置的二进制位的值,格式是setbit key值 offset索引 值

14:bitop:对多个二进制值进行位操作,格式是bitop 操作 目的key key值1 key值2,操作有and、or、xor、not,key值可以是多个

15:getset:原子的设置key的值,并返回key的旧值. 格式:getset key value

List类型的操作命令

1:lpush/rpush:将制定内容添加到list 开头/末尾 rpush key1 "last" 将last添加到列表末尾 

2:lrange:按索引范围获取值,格式是 lrange list的key 起始索引 终止索引,-1表示最后一个索引

3:lindex:获取指定索引的值,格式是 lindex list的key 索引号

4:lpop/rpop:取出头/尾部数据并删除,格式是 lpop list的key

5:llen:获取元素个数,格式是llen list的key

6:lrem:删除元素,格式是lrem list的key 数量 item项的值,数量可正负,表示从左或右删除

7:ltrim:保留指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引

8:blpop/brpop:弹出值,格式是blpop list的key值 过期时间,key可以是多个,如果没有值,会一值等待有值,直到过期

对Set类型的操作命令

1:sadd:添加元素,格式是 sadd set的key item项的值,item项可以多个

2:smembers:获取集合中所有元素,格式是 smembers set的key

3:sismember:判断元素是否在集合众,格式是 sismember set的key item项的值

4:srem:删除元素,格式是 srem set的key item项的值

5:scard:获取集合中元素个数,格式是scard set的key

6:srandmember:随机获取集合中的元素,格式是srandmember set的key [数量],数量为正的时候,会随机获取这么多个不重复的元素;如果数量大于集合元素个数,返回全部;如果数量为负,会随机获得这么多个元素,可能有重复

7:spop:弹出元素,格式是spop set的key

8:smove:移动元素,格式是smove 源set的key 目的set的key item项的值

9:sdiff:差集,返回在第一个set里面而不在后面任何一个set里面的项,格式是sdiff set的key 用来比较的多个set的key

10:sdiffstore:差集并保留结果,格式是命令 存放结果的set的key set的key 用来比较的多个set的key

11:sinter:交集,返回多个set里面都有的项,格式是sinter 多个set的key

12:sinterstore:交集并保留结果,格式是sinter 存放结果的set的key 多个set的key

13:sunion:并集,格式是sunion 多个set的key

14:sunionstore:并集并保留结果,格式是sunionstore 存放结果的set的key 多个set的key

Hash类型的操作命令

1:hset:设置值,格式是hset Hash的Key 项的key 项的值

2:hmset:同时设置多对值,格式是hmset Hash的Key 项的key 项的值,项的key和值可多对

3:hgetall:获取该Key下所有的值,格式是hgetall Hash的Key

4:hget:获取值,格式是hget Hash的Key 项的key

5:hmget:同时获取多个值,格式是hmget Hash的Key 项的key,项的key可以是多个

6:hdel:删除某个项,格式是hdel Hash的Key 项的key

7:hlen:获取Key里面的键值对数量,格式是hlen Hash的Key

8:hexists:判断键值是否存在,格式是hexists Hash的Key 项的key

9:hkeys:获取所有Item的key,格式是hkeys Hash的Key

10:hvals:获取所有Item的值,格式是hvals Hash的Key

11:hincrby:增减整数数字,格式是hincrby Hash的Key 项的key 正负整数

12:hincrbyfloat:增减Float数值,格式是hincrbyfloat Hash的Key 项的key 正负float

13:hsetnx: 不存在则赋值,存在时什么都不做, 格式是hsetnx Hash的Key 项的key 项的值

ZSet类型的操作命令

1:zadd:添加元素,格式是zadd zset的key score值 项的值,Score和项可以是多对,score可以是整数,也可以是浮点数,还可以是+inf表示正无穷大,-inf表示负无穷大

2:zrange:获取索引区间内的元素,格式是zrange zset的key 起始索引 终止索引 (withscores)

3:zrangebyscore:获取分数区间内的元素,格式是zrangebyscore zset的key 起始score 终止score(withscores),默认是包含端点值的,如果加上“(”表示不包含;后面还可以加上limit来限制

4:zrem:删除元素,格式是zrem zset的key 项的值,项的值可以是多个

5:zcard:获取集合中元素个数,格式是zcard zset的key

6:zincrby:增减元素的Score,格式是zincrby zset的key 正负数字 项的值

7:zcount:获取分数区间内元素个数,格式是zcount zset的key 起始score 终止score

8:zrank:获取项在zset中的索引,格式是zrank zset的key 项的值

9:zscore:获取元素的分数,格式是zscore zset的key 项的值,返回项在zset中的score

10:zrevrank:获取项在zset中倒序的索引,格式是zrevrank zset的key 项的值

11:zrevrange:获取索引区间内的元素,格式是zrevrange zset的key 起始索引 终止索引 (withscores)

12:zrevrangebyscore:获取分数区间内的元素,格式是zrevrangebyscore zset的key 终止score 起始score (withscores)

13:zremrangebyrank:删除索引区间内的元素,格式是zremrangebyrank zset的key 起始索引 终止索引

14:zremrangebyscore:删除分数区间内的元素,格式是命令 zset的key 起始score 终止score

15:zinterstore:交集,格式是ZINTERSTORE dest-key key-count key [key ...] [WEIGHTS weight

[weight ...]] [AGGREGATE SUM|MIN|MAX]

16:zunionstore:并集,格式是ZUNIONSTORE dest-key key-count key [key ...] [WEIGHTS weight[weight ...]] [AGGREGATE SUM|MIN|MAX]

处理过期keys的命令

1:expire:设置过期时间,格式是expire key值 秒数

2:expireat:设置过期时间,格式是expireat key值 到秒的时间戳

3:ttl:查看还有多少秒过期,格式是ttl key值,-1表示永不过期,-2表示已过期

4:persist:设置成永不过期,格式是persist key值,删除key的过期设置;另外使用set或

    者getset命令为键赋值的时候,也会清除键的过期时间

5:pttl:查看还有多少毫秒过期,格式是pttl key值

6:pexpire:设置过期时间,格式是pexpire key值 毫秒数

7:pexpireat:设置过期时间,格式是pexpireat key值 到毫秒的时间戳

四、Redis数据结构的应用场景

最简单的 String ,可以作为 Memcached 替代品,用作缓存系统

使用 SetNx 可以实现简单的分布式锁

使用 list 的 Pop Push 功能可以作为阻塞队列/非阻塞队列

使用 SUBSCRIBE PUBLISH 可以实现发布/订阅模型

对数据进行实时分析,如可以累加统计等

使用 Set 做去重的计数统计

使用 SortedSet 可以做排行榜等排序场景

使用 getbit setbit bitcount 做大数据量的去重统计,在允许误差的情况下可使用HyperLogLog

使用 GEO 可以实现位置定位、附近的人

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

推荐阅读更多精彩内容

  • Redis简介 Redis是一款开源免费、高性能的非关系型数据库 非关系型数据库(Not Only SQL): 简...
    Lee_DH阅读 1,058评论 1 20
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,958评论 2 27
  • 2016年5月24日。此刻我坐在G1248列车上去潍坊。只有20分钟车程,这次是去浦发银行开通信用卡。这是...
    我是奢侈品阅读 176评论 0 0
  • 看魍魉之匣第一次接触到了过路魔这个概念。杀意突然降临又突然离去,一瞬间过路魔上身导致犯罪,而后恐慌焦灼不相信自...
    abby谈天说地聊自己阅读 1,125评论 0 1
  • 今晚特别投入的读吸引定律的秘密,心很静、沉浸其中,字字斟酌,句句体会,发现第一次读过后再次读时完全是不同的感受!有...
    刘淑正阅读 541评论 6 7