Redis 是彻底开源免费的,遵照BSD协议,是一个高性能的key-value数据库。
Redis 与其余 key - value 缓存产品有如下三个特色:php
Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重启的时候能够再次加载进行使用。html
Redis不只仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。java
Redis支持数据的备份,即master-slave模式的数据备份。python
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。mysql
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操做。ios
原子 – Redis的全部操做都是原子性的,同时Redis还支持对几个操做全并后的原子性执行。laravel
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过时等等特性。c++
Redis有着更为复杂的数据结构而且提供对他们的原子性操做,这是一个不一样于其余数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。git
Redis运行在内存中可是能够持久化到磁盘,因此在对不一样数据集进行高速读写时须要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另外一个优势是, 相比在磁盘上相同的复杂的数据结构,在内存中操做起来很是简单,这样Redis能够作不少内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,由于他们并不须要进行随机访问。程序员
1.在MacOSX下,用curl命令先下载redis:
$ curl -O http://download.redis.io/releases/redis-2.8.17.tar.gz
若是是Linux系统,可用wget命令下载:
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
2.解压并安装
$ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
3.启动redis服务
$ cd src $ ./redis-server
若是看到下面的图,表示redis安装成功了^_^
注意上面的方式启动redis 使用的是默认配置。也能够经过启动参数告诉redis使用指定配置文件使用下面命令启动。
$ cd src $ ./redis-server redis.conf
redis.conf是一个默认的配置文件。咱们能够根据须要使用本身的配置文件。
启动redis服务进程后,就可使用测试客户端程序redis-cli和redis服务交互了, 好比:
$ cd src $ ./redis-cli redis> set foo bar OK redis> get foo "bar"
这里能够开一个新的命令行窗口,个人redis保存路径:
Mac:cd /Users/mac/software/redis/redis-2.8.17 Mac:redis-2.8.17 mac$ cd src Mac:src mac$ ./redis-cli
说明:
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。如今咱们输入 PING 命令。
127.0.0.1:6379> ping PONG
测试:
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf。
你能够经过 CONFIG 命令查看或设置配置项。
Redis CONFIG 命令格式以下:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
实例
redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
使用 * 号获取全部配置项:
你能够经过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。
语法
CONFIG SET 命令基本语法:
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
实例
redis 127.0.0.1:6379> CONFIG SET loglevel "notice" OK redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
string是redis最基本的类型,你能够理解成与Memcached如出一辙的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string能够包含任何数据。好比jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
示例:
redis 127.0.0.1:6379> SET name "JackChan" OK redis 127.0.0.1:6379> GET name "JackChan"
在以上实例中咱们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为JackChan。
注意:一个键最大能存储512MB。
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
示例:
127.0.0.1:6379> HMSET user_id:1 name jackcheng age 25 address HongKong OK 127.0.0.1:6379> HGETALL user_id:1 1) "name" 2) "jackcheng" 3) "age" 4) "25" 5) "address" 6) "HongKong" 127.0.0.1:6379>
以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中咱们使用了 Redis HMSET, HGETALL 命令,user_id:1为键值。
每一个 hash 能够存储 232 - 1 键值对(40多亿)。
Redis 列表是简单的字符串列表,按照插入顺序排序。你能够添加一个元素导列表的头部(左边)或者尾部(右边)。
示例:
127.0.0.1:6379> lpush language php (integer) 1 127.0.0.1:6379> lpush language c (integer) 2 127.0.0.1:6379> lpush language java (integer) 3 127.0.0.1:6379> lpush language python (integer) 4 127.0.0.1:6379> lrange language 0 5 1) "python" 2) "java" 3) "c" 4) "php" 127.0.0.1:6379>
l ->list 列表 push 推入队列
列表最多可存储 232 - 1 元素 (4294967295, 每一个列表可存储40多亿)。
Redis的Set是string类型的无序集合。
集合是经过哈希表实现的,因此添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个string元素到,key对应的set集合中,成功返回1,若是元素以及在集合中返回0,key对应的set不存在返回错误。
sadd key member
示例:
127.0.0.1:6379> sadd pragmmer c++ (integer) 1 127.0.0.1:6379> sadd pragmmer oc (integer) 1 127.0.0.1:6379> sadd pragmmer oc (integer) 0 127.0.0.1:6379> smembers pragmmer 1) "c++" 2) "oc" 127.0.0.1:6379>
注意:以上实例中 oc 添加了两次,但根据集合内元素的惟一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1 (4294967295, 每一个集合可存储40多亿个成员)。
Redis zset 和 set 同样也是string类型元素的集合,且不容许重复的成员。
不一样的是每一个元素都会关联一个double类型的分数。redis正是经过分数来为集合中的成员进行从小到大的排序。
zset的成员是惟一的,但分数(score)却能够重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member
示例:
127.0.0.1:6379> zadd mytest 9 laravel (integer) 1 127.0.0.1:6379> zadd mytest 1 php (integer) 1 127.0.0.1:6379> zadd mytest 3 ios (integer) 1 127.0.0.1:6379> zadd mytest 2 php (integer) 0 127.0.0.1:6379> ZRANGEBYSCORE mytest 0 10 1) "php" 2) "ios" 3) "laravel" 127.0.0.1:6379>
Redis 性能测试是经过同时执行多个命令实现的。
语法
redis 性能测试的基本命令以下:
redis-benchmark [option] [option value]
实例:
redis-benchmark在安装目录src里边,下面咱们同时执行 10000 个请求来检测性能:
MacdeMacBook-Pro-3:src mac$ ./redis-benchmark -n 10000 ====== PING_INLINE ====== 10000 requests completed in 0.25 seconds 50 parallel clients 3 bytes payload keep alive: 1 48.44% <= 1 milliseconds 98.32% <= 2 milliseconds 99.51% <= 6 milliseconds 100.00% <= 6 milliseconds 39215.69 requests per second ... ... ====== MSET (10 keys) ====== 10000 requests completed in 0.38 seconds 50 parallel clients 3 bytes payload keep alive: 1
redis 性能测试工具可选参数以下所示:
带有参数的示例:
MacdeMacBook-Pro-3:src mac$ ./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 100000 -q SET: 29904.30 requests per second LPUSH: 25094.10 requests per second MacdeMacBook-Pro-3:src mac$
以上实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 100000,经过 -q 参数让结果只显示每秒执行的请求数。
开始在 PHP 中使用 Redis 前, 咱们须要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。接下来让咱们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases。
PHP安装redis扩展
如下操做须要在下载的 phpredis 目录中完成:
$ curl -O https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz $ cd phpredis-2.2.7 # 进入 phpredis 目录 $ /usr/local/php/bin/phpize # php安装后的路径 $ ./configure --with-php-config=/usr/local/php/bin/php-config $ make && make install
phpredis资源
https://github.com/michael-grunder/phpredis.git
注意:这里若是是使用的XAMPP安装的服务器,则经过查看phpinfo的PHP版本是否一致,若是不一致,则说明当前的路径为Mac系统自带的PHP版本。
查看PHP版本:
php -v
打印出来的是Mac系统自带的PHP路径,而咱们须要XAMPP安装的PHP,则须要在/Applications/XAMPP/xamppfiles/bin路径下找到PHPize安装的路径。
XAMPP的PHP版本为5.6.14:
查看当前所在目录命令 pwd
Linux中用 pwd 命令来查看”当前工做目录“的完整路径。pwd命令是Print Working Directory的缩写。 简单得说,每当你在终端进行操做时,你都会有一个当前工做目录。
MacdeMacBook-Pro-3:bin mac$ pwd /Applications/XAMPP/xamppfiles/bin
XAMPP的PHP安装的phpsize就在该路径下:
/Applications/XAMPP/xamppfiles/bin/phpize
acdeMacBook-Pro-3:phpredis mac$ ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config
MacdeMacBook-Pro-3:phpredis-3.0.0 mac$ sudo make && make install
出现了这样的的错误:
若是出现这样的错误,则说明phpredis扩展包有问题,换一个扩展包,再重试下以前的步骤,便可安装成功。
phpredis资源
https://github.com/michael-grunder/phpredis.git
Installing shared extensions: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/ MacdeMacBook-Pro-3:phpredis mac$
vi /usr/local/php/lib/php.ini
增长以下内容:
extension=redis.so
若是在XAMPP集成环境的目录下:
extension_dir = "/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/" extension=redis.so
安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。
<?php echo phpinfo(); ?>
MacdeMacBook-Pro-3:phpredis mac$ cd /Users/mac/software/redis/redis-2.8.17/src MacdeMacBook-Pro-3:src mac$ ./redis-server
<?php //链接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //查看服务是否运行 echo "Server is running: " . $redis->ping(); ?>
执行脚本,输出结果为:
Connection to server sucessfully Server is running: PONG
Redis PHP String(字符串) 实例
<?php //链接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //设置 redis 字符串数据 $redis->set("tutorial-name", "Redis tutorial"); // 获取存储的数据并输出 echo "Stored string in redis:: " . $redis->get("tutorial-name"); ?>
执行脚本,输出结果为:
Connection to server sucessfully Stored string in redis:: Redis tutorial