系统为OS X 10.10.3 (14D2134) ,安装redis过程为:
1.在http://redis.io/download下载最新安装包
?
2.安装Xcode,Xcode可以在https://github.com/iBcker/adcdownload这里找到资源,官网下载速度太慢。OS 10.10好像最高支持Xcode 6.3,所以Xcode版本不要选太高的,比如一开始我安装了Xcode_7.3_beta然后提示这个版本要求的操作系统版本为10.11。为了装redis好像必须安装Xcode,网上没有找到其他不安装Xcode的方式。
?
3.终端进入redis压缩包解压之后的目录中,通过以下命令执行安装
sudo make
sudo make test
sudo make install
?
4.启动和关闭redis服务。上面三条命令执行之后就安装好了,现在可以在终端中通过redis-server启动redis,命令可以在任何路径下执行
?
redis-server回车之后会输出:
?
50456:C 03 Feb 10:28:48.047 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
50456:M 03 Feb 10:28:48.049 * Increased maximum number of open files to 10032 (it was originally set to 2560).
? ? ? ? ? ? ? ? _._
?? ? ? ? ? _.-``__ ‘‘-._
? ? ? _.-``? ? `.? `_.? ‘‘-._ ? ? ? ? ? Redis 3.0.7 (00000000/0) 64 bit
? .-`` .-```.? ```\/? ? _.,_ ‘‘-._
?(? ? ‘? ? ? , ? ? ? .-`? | `,? ? ) ? ? Running in standalone mode
?|`-._`-...-` __...-.``-._|‘` _.-‘| ? ? Port: 6379
?|? ? `-._ ? `._? ? / ? ? _.-‘? ? | ? ? PID: 50456
? `-._? ? `-._? `-./? _.-‘? ? _.-‘
?|`-._`-._? ? `-.__.-‘? ? _.-‘_.-‘|
?|? ? `-._`-._? ? ? ? _.-‘_.-‘? ? | ? ? ? ? ? http://redis.io
? `-._? ? `-._`-.__.-‘_.-‘? ? _.-‘
?|`-._`-._? ? `-.__.-‘? ? _.-‘_.-‘|
?|? ? `-._`-._? ? ? ? _.-‘_.-‘? ? |
? `-._? ? `-._`-.__.-‘_.-‘? ? _.-‘
? ? ? `-._? ? `-.__.-‘? ? _.-‘
? ? ? ? ? `-._? ? ? ? _.-‘
? ? ? ? ? ? ? `-.__.-‘
?
50456:M 03 Feb 10:28:48.050 # Server started, Redis version 3.0.7
50456:M 03 Feb 10:28:48.050 * The server is now ready to accept connections on port 6379
?
出现上面的信息表明redis已经启动,输出信息中可以看到绑定的端口是6379,进程ID是50456。绑定的端口是固定的,进程ID每次启动可能都不相同。
?
关闭redis服务器可以在其他终端中通过?
sudo kill 50456
命令完成,这条命令执行之后原本启动redis server的终端会输出停止服务的相关信息。
?
检查redis服务器是否在工作
redis-cli
?
如果redis server没有启动,会输出下面的信息
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>
此时命令行是进入到redis状态中,即输入的命令都认为是redis的命令,输入help可以看到redis相关的帮助信息,通过quit命令退出redis命令模式
?
如果redis server已经启动,执行redis-cli会输出下面的信息
127.0.0.1:6379>
这表示服务已经启动,可以执行redis命令,比如最简单的输入命令ping,redis会回复PONG,redis的命令是不区分大小写的
?
?
在http://try.redis.io/这里可以找到互动教程,上面是教程说明,页面最下面的文本框可以输入redis命令。
?
redis支持五中数据类型:字符串,哈希,列表,集合,有序集合,所有命令可以在https://redis.readthedocs.org/en/2.4/这个页面中找到
?
?
redis本质上是一个键值对存储系统。我们可以通过set key value方式存入字符串或其他类型数据,然后通过get key的方式读取数据。例如:
?
127.0.0.1:6379> set name redis
OK
127.0.0.1:6379> get name
"redis"
127.0.0.1:6379>
?
incr,del,setnx
incr对一个整数进行递增,能保证操作的原子性
del 删除一个key,以及对应的value
setnx 如果不存在则设置,存在则不设置,set if not exits
127.0.0.1:6379> set number 10
OK
127.0.0.1:6379> incr number
(integer) 11
127.0.0.1:6379> get number
"11"
127.0.0.1:6379> del number
(integer) 1
127.0.0.1:6379> get number
(nil)
127.0.0.1:6379> setnx age 25
(integer) 1
127.0.0.1:6379> get age
"25"
127.0.0.1:6379> setnx age 30
(integer) 0
127.0.0.1:6379> get age
"25"
127.0.0.1:6379>
?
expire,ttl
redis可以指定一个键值对的存活时间,存活时间到达之后键值对会被自动删除,通过expire key seconds设置key的存活时间为seconds,例如expire age 120表示age这个键对应的键值对存活时间为120秒。
ttl命令用于返回一个键值对存活剩余时间,返回-2表明这个键值对已经被删除,返回-1表明这个键值对永久有效,使用set命令之后键值对的生命周期会被重置为永久有效。
127.0.0.1:6379> set server_status true
OK
127.0.0.1:6379> get server_status
"true"
127.0.0.1:6379> expire server_status 180
(integer) 1
127.0.0.1:6379> ttl server_status
(integer) 171
127.0.0.1:6379> ttl server_status? //3分钟之后再次执行,-2表明已经过期被删除
(integer) -2
127.0.0.1:6379> get server_status
(nil)
127.0.0.1:6379> set server_status true
OK
127.0.0.1:6379> ttl server_status ?
(integer) -1
127.0.0.1:6379>
?
和列表操作相关的命令主要有rpush,lpush,llen,lrange,lpop,rpop
rpush将新value存放在list的尾部
lpush将新value存放在list的首部
lrange返回列表的子序列,lrange index0 index1,index0和inxdex1指定了这个子序列在list中的起始和结束为止,index1=-1表示直到列表的末尾
llen返回列表长度
lpop返回并删除列表头部的元素
rpop返回并删除列表尾部的元素
?
127.0.0.1:6379> rpush typeList php
(integer) 1
127.0.0.1:6379> rpush typeList java
(integer) 2
127.0.0.1:6379> lpush typeList c++
(integer) 3
127.0.0.1:6379> lrange typeList 0 -1
1) "c++"
2) "php"
3) "java"
127.0.0.1:6379> lrange typeList 0 1
1) "c++"
2) "php"
127.0.0.1:6379> lrange typeList 1 2
1) "php"
2) "java"
127.0.0.1:6379> llen typeList
(integer) 3
127.0.0.1:6379> lpop typeList
"c++"
127.0.0.1:6379> rpop typeList
"java"
127.0.0.1:6379> llen typeList
(integer) 1
127.0.0.1:6379> lrange typeList 0 -1
1) "php"
127.0.0.1:6379>
?
和集合操作相关的命令主要有sadd,srem,sismember,smembers,sunion
sadd添加元素到set
srem从set中移除元素
sismember测试给定的元素是否为集合中的元素,如果是返回1,否则返回0
smembers返回集合中的所有元素
sunion合并两个或多个集合并返回合并后集合中的所有元素
?
127.0.0.1:6379> sadd strSet redis
(integer) 1
127.0.0.1:6379> sadd strSet mybatis
(integer) 1
127.0.0.1:6379> sadd strSet spring
(integer) 1
127.0.0.1:6379> srem strSet spring
(integer) 1
127.0.0.1:6379> sismember strSet spring
(integer) 0
127.0.0.1:6379> sismember strSet mybatis
(integer) 1
127.0.0.1:6379> smembers strSet
1) "mybatis"
2) "redis"
127.0.0.1:6379> sadd numSet 123
(integer) 1
127.0.0.1:6379> sadd numSet 456
(integer) 1
127.0.0.1:6379> sunion strSet numSet
1) "456"
2) "123"
3) "redis"
4) "mybatis"
127.0.0.1:6379>
?
?
?
?
?
?