资讯专栏INFORMATION COLUMN

Redis开发学习

ccj659 / 2070人阅读

摘要:语法命令基本语法实例数据类型支持五种数据类型字符串,哈希,列表,集合及有序集合。资源修改文件增加如下内容如果在集成环境的目录下安装完成后重启或。

Redis 简介

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

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

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

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

Redis 优势

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

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

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

丰富的特性 – 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-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 安装目录下,文件名为 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 数据类型

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"
OK
redis 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 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多亿)。

List(列表)

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多亿)。

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) 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多亿个成员)。

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) 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 性能测试的基本命令如下:

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 安装

开始在 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$
修改php.ini文件
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扩展。

开启redis服务
MacdeMacBook-Pro-3:phpredis mac$ cd /Users/mac/software/redis/redis-2.8.17/src
MacdeMacBook-Pro-3:src mac$ ./redis-server
php连接到 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(字符串) 实例

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

参考博文:
Redis快速学习
【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21728.html

相关文章

  • Laravel学习笔记之Model Observer模型观察者

    摘要:说明本文主要学习下的模型观察者,把一点点经验分享出来希望对别人能有帮助。模型观察者这个功能能做很多事情,比如模型更新时发个通知。总结本篇文章主要学了下的模型观察者,发现这个功能也能使代码结构更清晰,觉得挺好的。 说明:本文主要学习下Laravel的Model Observer模型观察者,把一点点经验分享出来希望对别人能有帮助。同时,作者会将开发过程中的一些截图和代码黏上去,提高阅读效率...

    Crazy_Coder 评论0 收藏0
  • Laravel学习笔记之Redis保存页面浏览量

    摘要:说明本文主要讲述使用作为缓存加快页面访问速度。何不用来做缓存,等到该达到一定浏览页面后再刷新下,效率也很高。可作缓存系统队列系统。 说明:本文主要讲述使用Redis作为缓存加快页面访问速度。同时,作者会将开发过程中的一些截图和代码黏上去,提高阅读效率。 备注:作者最近在学习github上别人的源码时,发现好多在计算一篇博客页面访问量view_count时都是这么做的:利用Laravel...

    z2xy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<