Redis开发学习

Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:

  1. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  3. Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

  3. 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样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-cliredis> set foo barOKredis> get foo"bar"

这里可以开一个新的命令行窗口,我的redis保存路径:

Mac:cd /Users/mac/software/redis/redis-2.8.17Mac:redis-2.8.17 mac$ cd srcMac:src mac$ ./redis-cli

说明:
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

127.0.0.1:6379> pingPONG

测试:

Redis 配置

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 loglevel1) "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"OKredis 127.0.0.1:6379> CONFIG GET loglevel1) "loglevel"2) "notice"

Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB
示例:

redis 127.0.0.1:6379> SET name "JackChan"OKredis 127.0.0.1:6379> GET name"JackChan"

在以上实例中我们使用了 Redis 的 SETGET 命令。键为 name,对应的值为JackChan。
注意:一个键最大能存储512MB。

Hash(哈希)

Redis hash 是一个键值对集合
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
示例:

127.0.0.1:6379> HMSET user_id:1 name jackcheng age 25 address HongKongOK127.0.0.1:6379> HGETALL user_id:11) "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多亿)。

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
示例:

127.0.0.1:6379> lpush language php(integer) 1127.0.0.1:6379> lpush language c(integer) 2127.0.0.1:6379> lpush language java(integer) 3127.0.0.1:6379> lpush language python(integer) 4127.0.0.1:6379> lrange language 0 51) "python"2) "java"3) "c"4) "php"127.0.0.1:6379>

l ->list 列表 push 推入队列
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

Set(集合)

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) 1127.0.0.1:6379> sadd pragmmer oc(integer) 1127.0.0.1:6379> sadd pragmmer oc(integer) 0127.0.0.1:6379> smembers pragmmer1) "c++"2) "oc"127.0.0.1:6379>

注意:以上实例中 oc 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序
zset的成员是唯一的,但分数(score)却可以重复

zadd 命令
添加元素到集合,元素在集合中存在则更新对应score

zadd key score member 

示例:

127.0.0.1:6379> zadd mytest 9 laravel(integer) 1127.0.0.1:6379> zadd mytest 1 php(integer) 1127.0.0.1:6379> zadd mytest 3 ios(integer) 1127.0.0.1:6379> zadd mytest 2 php(integer) 0127.0.0.1:6379> ZRANGEBYSCORE mytest 0 101) "php"2) "ios"3) "laravel"127.0.0.1:6379>

Redis 性能测试

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: 148.44% 带有参数的示例:

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### 安装开始在 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

**注意:这里如果是使用的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

MacdeMacBook-Pro-3:phpredis-3.0.0 mac$ sudo make && make install

出现了这样的的**错误**:### 修改php.ini文件

vi /usr/local/php/lib/php.ini

增加如下内容:

extension=redis.so

安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。
参考博文:Redis快速学习#redis、php#

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部