首页 > 开发 > linux > 正文

redis入门:介绍、特点、安装、各类型常用操作

2016-07-25 21:35:06  来源:慕课网
一、redis介绍  Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
  Redis支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) , bitmaps(一串连续的2进制数字), hyperloglogs (一个概率统计的数据结构,可以被用来估计一个集合的基数)和 地理空间(geospatial) 索引半径查询。
  Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
二、redis特点  通过上面的介绍可以看到,Redis有以下特点:
  1、支持丰富的数据结构和命令
  2、支持数据持久化(硬盘上)
  3、支持事务
  4、值最大可到512M
  5、支持集群部署(3.0开始自带)
三、ubuntu下安装  由于 redis 主要用来作服务器上的缓存和消息队列,主要也是针对linux系统开发的,所以这里也只介绍如何在linux系统(本文用的是ubuntu环境)下安装(windows系统上也是可以安装的,可自行google)
# apt-get install redis-server  安装完成后,redis会自动启动,我们可以通过下面的命令查看:
# ps -aux grep redisroot 2846 0.0 0.0 11740 936 pts/0 S+ 00:59 0:00 grep --color=auto redisredis 17170 0.0 0.3 39844 7184 ? Ssl Jun12 15:31 /usr/bin/redis-server 127.0.0.1:6379  还可以通过netstat查看6379(redis默认端口)端口监听情况:
# netstat -nlt grep 6379tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN  通过以上命令我们可以看到redis已经正确实装并启用了。
  安装了redis服务端后,会自带安装一个命令行客户端程序 redis-cli,直接输入 redis-cli就可以启动:
# redis-cli127.0.0.1:6379>   以下内容中的代码部分就可以在这里验证。
四、各类型常用操作  1、String类型常用操作
  Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字,常用的命令有:
set:新增或修改记录get:查看获取(打印)记录decr:原子递减(此时value为数字)incr:原子递增(此时value为数字)mset:批量写入mget:批量读取  部分命令演示:
# redis-cli//新增记录127.0.0.1:6379> set name imoocOK//读取记录127.0.0.1:6379> get name"imooc"//修改记录127.0.0.1:6379> set name imooc2OK127.0.0.1:6379> get name"imooc2"//value也可以是数字127.0.0.1:6379> set age 20OK127.0.0.1:6379> get age"20"//原子递减127.0.0.1:6379> decr age(integer) 19//原子递增127.0.0.1:6379> incr age(integer) 20//批量新增127.0.0.1:6379> mset sex man city wuhan OK//批量读取127.0.0.1:6379> mget sex city1) "man"2) "wuhan"  2、hash类型常用操作
  Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,常用的命令有:
hset key field value:将哈希表 key 中的字段 field 的值设为 value hget key field:获取存储在哈希表中指定字段的值hdel key field2 [field2]:删除一个或多个哈希表字段hkeys key:获取所有哈希表中的字段hvals key:获取哈希表中所有值hexists key field:查看哈希表 key 中,指定的字段是否存在hgetall key:获取在哈希表中指定 key 的所有字段和值hlen key:获取哈希表中字段的数量hmset key field1 value1 [field2 value2 ]:同时将多个 field-value (域-值)对设置到哈希表 key 中hmget key field1 [field2]:获取所有给定字段的值  部分命令演示:
//新增HASH127.0.0.1:6379> hset user1 name atwal(integer) 0//获取HASH值127.0.0.1:6379> hget user1 name"atwal"//增加HASH值127.0.0.1:6379> hset user1 city wuhan(integer) 1//批量增加HASH值127.0.0.1:6379> hmset user1 work coder language phpOK//获取所有HASH字段和值127.0.0.1:6379> hgetall user11) "name"2) "atwal"3) "city"4) "wuhan"5) "work"6) "coder"7) "language"8) "php"//删除某个字段127.0.0.1:6379> hdel user1 language(integer) 1127.0.0.1:6379> hgetall user11) "name"2) "atwal"3) "city"4) "wuhan"5) "work"6) "coder"  3、list类型常用操作
  Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,常用命令:
lpop key:移出并获取列表的第一个元素lpush key value1 [value2]:将一个或多个值插入到列表头部lpushx key value:将值value插入到列表key的表头,当且仅当key存在并且是一个列表rpop key:移除并获取列表最后一个元素rpush key value1 [value2]:在列表中添加一个或多个值rpushx key value:为已存在的列表添加值lrange key start stop:获取列表指定范围内的元素,lrange key 0 -1 表示输出所有元素lrem key count value:根据参数count的值(count > 0:从表头向表尾搜索,数量为count,count < 0从表尾向表头搜索,数量为count的绝对值,count = 0 移除表中所有与value相等的值),移除列表中与参数value相等的元素lset key index value:通过索引设置列表元素的值lindex key index:通过索引获取列表中的元素llen key:获取列表长度  部分命令演示:
//加个多个元素到列表msg127.0.0.1:6379> lpush msg m i d e h k(integer) 6//向列表头部添加a元素127.0.0.1:6379> lpushx msg a(integer) 7//输出列表127.0.0.1:6379> lrange msg 0 -11) "a"2) "k"3) "h"4) "e"5) "d"6) "i"7) "m"//移除列表第一个元素127.0.0.1:6379> lpop msg"a"127.0.0.1:6379> lrange msg 0 -11) "k"2) "h"3) "e"4) "d"5) "i"6) "m"//移除列表最后一个元素127.0.0.1:6379> rpop msg"m"//向列表尾部添加rm元素127.0.0.1:6379> rpush msg rm(integer) 6127.0.0.1:6379> lrange msg 0 -11) "k"2) "h"3) "e"4) "d"5) "i"6) "rm"//删除值为d的元素127.0.0.1:6379> lrem msg 0 d(integer) 1127.0.0.1:6379> lrange msg 0 -11) "k"2) "h"3) "e"4) "i"5) "rm"//修改第二个元素为hello127.0.0.1:6379> lset msg 1 helloOK127.0.0.1:6379> lrange msg 0 -11) "k"2) "hello"3) "e"4) "i"5) "rm"//获取第二个位置元素值127.0.0.1:6379> lindex msg 1"hello"//获取列表元素个数127.0.0.1:6379> llen msg(integer) 5  4、set类型常用操作
  Set是string类型的无序集合。集合成员是唯一的。常用命令:
sadd key member1 [member2]:向集合添加一个或多个成员sdiff key1 [key2]:返回给定所有集合的差集sdiffstore destination key1 [key2]:返回给定所有集合的差集并存储在 destination 中sinter key1 [key2]:返回给定所有集合的交集sinterstore destination key1 [key2]:返回给定所有集合的交集并存储在 destination 中sunion key1 [key2]:返回所有给定集合的并集sunionstore destination key1 [key2]:所有给定集合的并集存储在 destination 集合中smove source destination member:将 member 元素从 source 集合移动到 destination 集合spop key:移除并返回集合中的一个随机元素srandmember key [count]:返回集合中一个或多个随机数srem key member1 [member2]:移除集合中一个或多个成员smembers key:返回集合中的所有成员sismember key member:判断 member 元素是否是集合 key 的成员scard key:获取集合的成员数  部分命令演示:
//添加a b c d到follow集合中127.0.0.1:6379> sadd follow a b c d(integer) 4//添加c d e f到fans集合中127.0.0.1:6379> sadd fans c d e f(integer) 4//计算follow集合与fans集合的差集127.0.0.1:6379> sdiff follow fans1) "a"2) "b"//计算follow集合与fans集合的交集127.0.0.1:6379> sinter follow fans1) "d"2) "c"//计算follow集合与fans集合的并集127.0.0.1:6379> sunion follow fans1) "f"2) "d"3) "b"4) "a"5) "e"6) "c"//从follow集合中随机删除一个元素127.0.0.1:6379> spop follow"a"//从follow集合中随机删除一个元素127.0.0.1:6379> spop follow"b"//follow集合的所有元素127.0.0.1:6379> smembers follow1) "d"2) "c"//fans集合的所有元素127.0.0.1:6379> smembers fans1) "e"2) "f"3) "d"4) "c"  5、Sorted Set类型常用操作
  Sorted Set和Set一样也是string类型元素的集合,且不允许重复的成员。不同的是Sorted Set每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。常用命令:
zadd key score1 member1 [score2 member2]:向有序集合添加一个或多个成员,或者更新已存在成员的分数zcard key:获取有序集合的成员数zcount key min max:计算在有序集合中指定区间分数的成员数zrange key start stop [withscores]:通过索引区间返回有序集合成指定区间内的成员zremrange key start stop [withscores]:返回有序集中指定区间内的成员,通过索引,分数从高到底zrangebyscore key min max [withscores] [limit]:通过分数返回有序集合指定区间内的成员zremrangebyscore key min max:移除有序集合中给定的分数区间的所有成员zrank key member:返回有序集合中指定成员的索引zrevrank key member:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序zrem key member [member ...]:移除有序集合中的一个或多个成员zremrangebyrank key start stop:移除有序集合中给定的排名区间的所有成员zrevrangebyscore key max min [withscores]:返回有序集中指定分数区间内的成员,分数从高到低排序zscore key member:返回有序集中,成员的分数值  部分命令演示:
//创建有序列表score127.0.0.1:6379> zadd score 90 jim 95 lily(integer) 2//获取成员数127.0.0.1:6379> zcard score(integer) 2//获取 0 到 100 分之间的元素个数127.0.0.1:6379> zcount score 0 100(integer) 2//获取lily索引127.0.0.1:6379> zrank score lily(integer) 1//获取jim分数127.0.0.1:6379> zscore score jim"90"//获取索引0 1之间的带分数元素127.0.0.1:6379> zrange score 0 1 withscores1) "jim"2) "90"3) "lily"4) "95"  6、Pub/Sub类型常用操作
  Pub/Sub(发布/订阅)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,可用于实时消息系统。常用命令:
subscribe channel [channel ...]:订阅给定的一个或多个频道的信息。unsubscribe [channel [channel ...]]:指退订给定的频道。publish channel message:将信息发送到指定的频道。pubsub subcommand [argument [argument ...]]:查看订阅与发布系统状态。  命令演示:
//先在终端1上订阅频道im127.0.0.1:6379> subscribe im Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "im"3) (integer) 1//在终端2上im频道上发布消息# redis-cli127.0.0.1:6379> publish im hello(integer) 1127.0.0.1:6379> publish im hi(integer) 1//终端1上显示收到的消息1) "message"2) "im"3) "hello"1) "message"2) "im"3) "hi"  7、Transactions事务
  Transactions可以一次执行多个命令, 并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。  一个事务从开始到执行会经历以下三个阶段:
开始事务。命令入队。执行事务。  常用命令:
multi:标记一个事务块的开始。exec:执行所有事务块内的命令。discard:取消事务,放弃执行事务块内的所有命令。watch key [key ...]:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。unwatch:取消 WATCH 命令对所有 key 的监视。  命令演示:
//开始一个事务127.0.0.1:6379> multiOK127.0.0.1:6379> set name imoocQUEUED127.0.0.1:6379> set age 20QUEUED127.0.0.1:6379> incr ageQUEUED127.0.0.1:6379> incr ageQUEUED127.0.0.1:6379> hmset user1 name atwal city wuhanQUEUED//执行上面事务块内的所有命令127.0.0.1:6379> exec1) OK2) OK3) (integer) 214) (integer) 225) OK  以上只是redis的基本用法,redis还有很多高级用法,如数据的备份恢复,安全,在PHP中使用等等,这些内容留在下次再分享吧:)