一、下载与安装
下载地址:http://www.redis.net.cn/ 下载redis-x.x.x.tar.gz包
安装步骤:
1、首先需要安装gcc: yum install gcc ,如果碰到输入,直接输y即可
2、将redis的tar包放到/usr/local文件夹下
3、解压tar包:tar -zxvf redis-xxx.tar.gz
4、进入到解压好的redis目录,进行编译:make
5、进入到src目录下进行安装验证:make install(ls 查看是否有redis-server redis-cli)
6、cd到bin目录下启动redis:./redis-server /usr/local/redis-xxx/redis.conf
7、查看是否启动成功:ps -ef | grep 6379(或redis)
8、在xshell进入客户端: ./bin/redis-cli 退出: exit或quit
退出服务端:kill -9 进程id ./bin/redis-server shoutdown pkill redis-server
二、命令入门(linux下的命令)
redis共有5种数据类型:String hash set list zset
1)String类型
1、SET key value 设置指定 key 的值
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name stevetaocom
OK
2、GET key 获取指定 key 的值
127.0.0.1:6379> get name
"stevetaocom"
3、
GETRANGE key start end 返回 key 中字符串值的子字符
127.0.0.1:6379> getrange name 1 3
"tev"
4、
GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
127.0.0.1:6379> getset name lisi
"stevetaocom"
127.0.0.1:6379> get name
"lisi"
5、MGET key1 [key2...] 获取所有(一个或多个)给定 key 的值。
127.0.0.1:6379> mget name age sex security
1) "lisi"
2) "18"
3) "man"
4) "student"
6、SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
127.0.0.1:6379> setex time 10 bye
OK
127.0.0.1:6379> get time
"bye"
127.0.0.1:6379> get time
"bye"
127.0.0.1:6379> get time
(nil)
7、
SETNX key value 只有在 key 不存在时设置 key 的值。
127.0.0.1:6379> setnx time 2012
(integer) 1
127.0.0.1:6379> get time
"2012"
127.0.0.1:6379> setnx time 2013
(integer) 0
127.0.0.1:6379> get time
"2012"
8、
STRLEN key 返回 key 所储存的字符串值的长度。
127.0.0.1:6379> strlen time
(integer) 4
127.0.0.1:6379> strlen name
(integer) 4
127.0.0.1:6379> strlen age
(integer) 2
9、
MSET key value [key value ...] 同时设置一个或多个 key-value 对。
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset name lisi age 25 sex man role student
OK
127.0.0.1:6379> mget name age sex role
1) "lisi"
2) "25"
3) "man"
4) "student"
10、
MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
11、PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
12、INCR key 将 key 中储存的数字值增一。
127.0.0.1:6379> get age
"19"
127.0.0.1:6379> incr age
(integer) 20
127.0.0.1:6379> get age
"20"
13、
INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
127.0.0.1:6379> get age
"19"
127.0.0.1:6379> incrby age 12
(integer) 31
127.0.0.1:6379> get age
"31"
14、
INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
127.0.0.1:6379> get age
"13"
127.0.0.1:6379> incrbyfloat age 1.25
"14.25"
127.0.0.1:6379> get age
"14.25"
127.0.0.1:6379>
15、
DECR key 将 key 中储存的数字值减一。
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> decr age
(integer) 19
127.0.0.1:6379> get age
"19"
16、
DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
127.0.0.1:6379> get age
"31"
127.0.0.1:6379> decrby age 11
(integer) 20
127.0.0.1:6379> get age
"20"
17、APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> append name isStudent
(integer) 13
127.0.0.1:6379> get name
"lisiisStudent"
2)hash类型 hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。
1、 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
127.0.0.1:6379> hset person name steve
(integer) 1
2、HGET key field 获取存储在哈希表中指定字段的值。
127.0.0.1:6379> hget person name
"steve"
3、HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
127.0.0.1:6379> hmset person age 26 sex man weight 63
OK
4、HMGET key field1 [field2] 获取所有给定字段的值
127.0.0.1:6379> hmget person name age sex weight
1) "steve"
2) "26"
3) "man"
4) "63"
5、HGETALL key 获取在哈希表中指定 key 的所有字段和值
127.0.0.1:6379> hgetall person
1) "name"
2) "steve"
3) "age"
4) "26"
5) "sex"
6) "man"
7) "weight"
8) "63"
6、 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
127.0.0.1:6379> hget person age
"26"
127.0.0.1:6379> hincrby person age 4
(integer) 30
7、 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
127.0.0.1:6379> hincrbyfloat person age 1.5
"31.5"
8、 HKEYS key 获取所有哈希表中的字段
127.0.0.1:6379> hkeys person
1) "name"
2) "age"
3) "sex"
4) "weight"
9、 HVALS key 获取哈希表中所有值
127.0.0.1:6379> hvals person
1) "steve"
2) "26"
3) "man"
4) "63"
10、HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
127.0.0.1:6379> hsetnx person address beijing
(integer) 1
127.0.0.1:6379> hget person address
"beijing"
127.0.0.1:6379> hsetnx person address hangzhou
(integer) 0
127.0.0.1:6379> hget person address
"beijing"
11、 HLEN key 获取哈希表中字段的数量
127.0.0.1:6379> hlen person
(integer) 5
12、 HDEL key field1 [field2] 删除一个或多个哈希表字段
127.0.0.1:6379> hdel person age address
(integer) 2
127.0.0.1:6379> hkeys person
1) "name"
2) "sex"
3) "weight"
13、HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
127.0.0.1:6379> hexists person age
(integer) 0
3)list类型 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
1、LPUSH key value1 [value2] 将一个或多个值插入到列表头部
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> lpush team jim anna steve tom
2、LRANGE key start stop 获取列表指定范围内的元素
127.0.0.1:6379> lrange team 0 3
1) "tom"
2) "steve"
3) "anna"
4) "jim"
3、LPUSHX key value 将一个值插入到已存在的列表头部
127.0.0.1:6379> lpushx team john
(integer) 5
127.0.0.1:6379> lrange team 0 4
1) "john"
2) "tom"
3) "steve"
4) "anna"
5) "jim"
4、LLEN key 获取列表长度
127.0.0.1:6379> llen team
(integer) 5
5、LINDEX key index 通过索引获取列表中的元素
127.0.0.1:6379> lrange team 0 4
1) "john"
2) "tom"
3) "steve"
4) "anna"
5) "jim"
127.0.0.1:6379> lindex team 3
"anna"
127.0.0.1:6379> lindex team 6
(nil) //超出范围的索引,返回值是null,没有报错
6、LSET key index value 通过索引设置列表元素的值
127.0.0.1:6379> lset team 3 peter
OK // 这里将anna改成了peter
127.0.0.1:6379> lindex team 3
"peter"
127.0.0.1:6379> lrange team 0 4
1) "john"
2) "tom"
3) "steve"
4) "peter"
5) "jim"
127.0.0.1:6379> lset team 5 jan
(error) ERR index out of range //超出范围的索引,会报错
7、LINSERT key BEFORE|AFTER pivot(已存在的值) value 在列表的元素前或者后插入元素
127.0.0.1:6379> linsert team before steve stack
(integer) 6
127.0.0.1:6379> linsert team after steve hulk
(integer) 7
127.0.0.1:6379> lrange team 0 6
1) "john"
2) "tom"
3) "stack"
4) "steve"
5) "hulk"
6) "peter"
7) "jim"
8、LPOP key 移出并获取列表的第一个元素
127.0.0.1:6379> lpop team
"john"
127.0.0.1:6379> lrange team 0 6
1) "tom"
2) "stack"
3) "steve"
4) "hulk"
5) "peter"
6) "jim"
9、RPOP key 移除并获取列表最后一个元素
127.0.0.1:6379> rpop team
"jim"
127.0.0.1:6379> lrange team 0 5
1) "tom"
2) "stack"
3) "steve"
4) "hulk"
5) "peter"
10、RPUSH key value1 [value2] 在列表尾部中添加一个或多个值
127.0.0.1:6379> rpush team zhangsan lisi wangwu
(integer) 8
127.0.0.1:6379> lrange team 0 7
1) "tom"
2) "stack"
3) "steve"
4) "hulk"
5) "peter"
6) "zhangsan"
7) "lisi"
8) "wangwu"
11、RPUSHX key value 为已存在的列表尾部添加值
127.0.0.1:6379> rpushx team lastman
(integer) 9
127.0.0.1:6379> lrange team 0 8
1) "tom"
2) "stack"
3) "steve"
4) "hulk"
5) "peter"
6) "zhangsan"
7) "lisi"
8) "wangwu"
9) "lastman"
12、LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
127.0.0.1:6379> ltrim team 1 3
OK
127.0.0.1:6379> lrange team 0 2
1) "stack"
2) "steve"
3) "hulk"
11、LREM key count value 移除列表元素(从表头开始)
127.0.0.1:6379> lrange team 0 5
1) "steve"
2) "steve"
3) "steve"
4) "stack"
5) "steve"
6) "hulk"
127.0.0.1:6379> llen team
(integer) 6
127.0.0.1:6379> lrem team 2 steve
(integer) 2
127.0.0.1:6379> lrange team 0 3
1) "steve"
2) "stack"
3) "steve"
4) "hulk"
127.0.0.1:6379> lrem team 3 steve
(integer) 2 //这里不够数,就移除集合中所有的,并不报错
127.0.0.1:6379> lrange team 0 3
1) "stack"
2) "hulk"
12、BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
13、BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
14、BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
15、RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
4)set类型 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
1、SADD key member1 [member2] 向集合添加一个或多个成员
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> sadd team zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379> sadd team zhangsan
(integer) 0
2、SPOP key 移除并返回集合中的一个随机元素
127.0.0.1:6379> spop team
"zhangsan"
3、SMEMBERS key 返回集合中的所有成员
127.0.0.1:6379> smembers team
1) "wangwu"
2) "lisi"
3) "jim"
4) "zhangsan"
5) "tom"
4、SISMEMBER key member 判断 member 元素是否是集合 key 的成员
127.0.0.1:6379> sismember team steve
(integer) 0 //不是返回0
127.0.0.1:6379> sismember team tom
(integer) 1 //是返回1
5、SREM key member1 [member2] 移除集合中一个或多个成员
127.0.0.1:6379> srem team tom
(integer) 1
127.0.0.1:6379> sismember team tom
(integer) 0
6、SRANDMEMBER key [count] 返回集合中一个或多个随机数
127.0.0.1:6379> srandmember team
"zhangsan"
127.0.0.1:6379> srandmember team 2
1) "wangwu"
2) "jim"
7、SCARD key 获取集合的成员数
127.0.0.1:6379> scard team
(integer) 5
127.0.0.1:6379> smembers team
1) "wangwu"
2) "tom"
3) "zhangsan"
4) "lisi"
5) "jim"
8、SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素
127.0.0.1:6379> sscan team 0 match *m
1) "0"
2) 1) "jim"
2) "tom"
127.0.0.1:6379> sscan team 0 match *m count 1
1) "4"
2) (empty list or set)
---------------有两个set集合,内容分别如下------------------
127.0.0.1:6379> smembers team
1) "wangwu"
2) "tom"
3) "zhangsan"
4) "lisi"
5) "jim"
127.0.0.1:6379> smembers class
1) "tom"
2) "jim"
3) "jan"
4) "anna"
5) "lili"
9、SDIFF key1 [key2] 返回给定所有集合的差集
127.0.0.1:6379> sdiff team class
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> sdiff class team
1) "lili"
2) "jan"
3) "anna"
10、SINTER key1 [key2] 返回给定所有集合的交集
127.0.0.1:6379> sinter team class
1) "tom"
2) "jim"
127.0.0.1:6379> sinter class team
1) "tom"
2) "jim"
11、SUNION key1 [key2] 返回所有给定集合的并集
127.0.0.1:6379> sunion class team <=> sunion team class
1) "wangwu"
2) "tom"
3) "zhangsan"
4) "lisi"
5) "jim"
6) "lili"
7) "anna"
8) "jan"
12、SDIFFSTORE destination key1 [key2] 返回给定所有集合的差集并存储在destination 中
13、SINTERSTORE destination key1 [key2] 返回给定所有集合的交集并存储在destination 中
14、SMOVE source destination member 将 member 元素从 source 集合移动到destination 集合
15、SUNIONSTORE destination key1 [key2] 所有给定集合的并集存储在destination 集合中
5)zset类型 Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
1、ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
127.0.0.1:6379> flushdb ---这个命令是情况redis中的所有键值对---
OK
127.0.0.1:6379> zadd team 0 zhangsan 1 lisi 2 wangwu
(integer) 3
2、ZCARD key 获取有序集合的成员数
127.0.0.1:6379> zcard team
(integer) 3
3、ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
127.0.0.1:6379> zcount team 0 1
(integer) 2
127.0.0.1:6379> zadd team 0 lili
(integer) 1
127.0.0.1:6379> zcount team 0 1
(integer) 3
4、ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
127.0.0.1:6379> zincrby team 3 lili
"3"
5、ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合成指定区间内的成员
127.0.0.1:6379> zrange team 0 3
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "lili"
6、
ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量
7、ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
8、ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序集合的成员(参数说明弄清楚)
127.0.0.1:6379> zrange team 0 3
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "lili"
127.0.0.1:6379> zlexcount team - +
(integer) 4
9、ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员
127.0.0.1:6379> zrangebyscore team -inf +inf ----所有的
1) "zhangsan"
2) "lisi"
3) "wangwu"
4) "lili"
127.0.0.1:6379> zrangebyscore team -inf +inf withscores ----所有的,带上分数
1) "zhangsan"
2) "0"
3) "lisi"
4) "1"
5) "wangwu"
6) "2"
7) "lili"
8) "3"
127.0.0.1:6379> zrangebyscore team -inf 1 ---分数小于等于1的
1) "zhangsan"
2) "lisi"
10、ZRANK key member 返回有序集合中指定成员的索引
127.0.0.1:6379> zrank team lisi
(integer) 1
127.0.0.1:6379> zrank team lili
(integer) 3
11、ZREM key member [member ...] 移除有序集合中的一个或多个成员
127.0.0.1:6379> zrem team lili
(integer) 1
127.0.0.1:6379> zrem team zhangsan lisi
(integer) 2
127.0.0.1:6379> zrange team 0 2
1) "wangwu"
12、
ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员 (LEX:min max参数没弄明白)
13、ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员(RANK:min max参数没弄明白)
14、ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员
127.0.0.1:6379> zadd team 49 book 99 box 199 ebooks
(integer) 3
127.0.0.1:6379> zrange team 0 -1 <=> 0~无穷大
1) "wangwu"
2) "book"
3) "box"
4) "ebooks"
127.0.0.1:6379> zremrangebyscore team 0 100
(integer) 3
127.0.0.1:6379> zrange team 0 -1
1) "ebooks"
15、ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到底
127.0.0.1:6379> zrange team 0 -1 withscores
1) "xx"
2) "25"
3) "yy"
4) "52"
5) "ebooks"
6) "199"
127.0.0.1:6379> zrevrange team 0 2
1) "ebooks"
2) "yy"
3) "xx"
127.0.0.1:6379> zrevrange team 0 1
1) "ebooks"
2) "yy"
16、ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17、ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18、ZSCORE key member 返回有序集中,成员的分数值
127.0.0.1:6379> zscore team yy
"52"
19、ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20、ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)
127.0.0.1:6379> zscan team 0
1) "0"
2) 1) "xx"
2) "25"
3) "yy"
4) "52"
5) "ebooks"
6) "199"
三、发布订阅
四、事务