redis是一种常用非关系型数据库,主要特点为高速,作为php工程师,redis是一种必须掌握的技术,可以有效应对高并发时的缓存问题。具体简介可以在菜鸟教程查看(http://www.runoob.com/redis/redis-intro.html)。
1.redis环境安装
系统环境为centos,下载地址为https://redis.io/download,下载后放到linux的目录里面。我一般用winscp在linux和windows之间传东西很方便,然后运行下面的代码解压并安装
$ wget http://download.redis.io/releases/redis-3.2.9.tar.gz
$ tar xzf redis-3.2.9.tar.gz
$ cd redis-3.2.9
$ make
接下来启动redis服务
$ cd src
$ ./redis-server
也可以加redis.conf 这样就可以按配置信息启动了。建议修改conf的daemonize为yes,这样redis会在后台运行。成功之后保持当前窗口,重新开一个窗口启动客户端就可以对redis进行操作了。
$ cd src
$ ./redis-cli
2.redis的五种数据类型
(图来源慕课网 侵删)
1)string 操作 存放字符串和数字,可以进行数学计算
127.0.0.1:7200> set string1 xiaozan
OK
127.0.0.1:7200> get string1
"xiaozan"
127.0.0.1:7200> set string2 4
OK
127.0.0.1:7200> incr string2
(integer) 5
127.0.0.1:7200> get string2
"5"
127.0.0.1:7200> decyby string2 2
(error) ERR unknown command 'decyby'
127.0.0.1:7200> decrby string2 2
(integer) 3
127.0.0.1:7200> get string2
"3"
127.0.0.1:7200>
2)list操作:双向队列,允许相同元素
127.0.0.1:7200> lpush list1 12
(integer) 1
127.0.0.1:7200> lpush list1 13
(integer) 2
127.0.0.1:7200> rpop list1 13
(error) ERR wrong number of arguments for 'rpop' command
127.0.0.1:7200> rpop list1
"12"
127.0.0.1:7200> lpush list2 12
(integer) 1
127.0.0.1:7200> lpush list2 13
(integer) 2
127.0.0.1:7200> lpush list2 13
(integer) 3
127.0.0.1:7200> llen list2
(integer) 3
3)set操作:不能有相同元素存在
127.0.0.1:7200> sadd set1 12
(integer) 1
127.0.0.1:7200> sadd set1 13
(integer) 1
127.0.0.1:7200> sadd set1 13
(integer) 0
127.0.0.1:7200> scard set1
(integer) 2
127.0.0.1:7200> sismember set1 13
(integer) 1
127.0.0.1:7200> sismember set1 12
(integer) 1
127.0.0.1:7200> srem set1 13
(integer) 1
127.0.0.1:7200> sismember set1 13
4)hash操作127.0.0.1:7200> hset hash1 key1 12
(integer) 1
127.0.0.1:7200> hget hash1 key1
"12"
127.0.0.1:7200> hset hash1 key2 12
(integer) 1
127.0.0.1:7200> hset hash1 key3 12
(integer) 1
127.0.0.1:7200> hlen hash1
(integer) 3
127.0.0.1:7200> hset hash1 key3 13
(integer) 0
127.0.0.1:7200> hget hash1 key3
"13"
127.0.0.1:7200> hmget hash1 key1 key2 key3
1) "12"
2) "12"
3) "13"
5)sort set操作:加权有利于排序127.0.0.1:7200> zadd zset1 10.1 val1
(integer) 1
127.0.0.1:7200> zadd zset1 11.1 val2
(integer) 1
127.0.0.1:7200> zadd zset1 9.2 val3
(integer) 1
127.0.0.1:7200> zcard zet1
(integer) 0
127.0.0.1:7200> zcard zset1
(integer) 3
127.0.0.1:7200> ZRANGE zser1 0 2 withscores
(empty list or set)
127.0.0.1:7200> ZRANGE zset1 0 2 withscores
1) "val3"
2) "9.1999999999999993"
3) "val1"
4) "10.1"
5) "val2"
6) "11.1"
127.0.0.1:7200> zrank zset1 val2
(integer) 2
127.0.0.1:7200> zadd zset1 12.2 val3
(integer) 0
127.0.0.1:7200> ZRANGE zset1 0 2 withscores
1) "val1"
2) "10.1"
3) "val2"
4) "11.1"
5) "val3"
6) "12.199999999999999"
此外,redis在2.8.9 版本添加了 HyperLogLog 结构。主要用于计算不同值的数量,即基数统计的算法。优点是所用空间小
127.0.0.1:7200> pfadd key 1
(integer) 1
127.0.0.1:7200> pfadd key 2
(integer) 1
127.0.0.1:7200> pfadd key 1
(integer) 0
127.0.0.1:7200> pfcount key
(integer) 2
127.0.0.1:7200>
3.redis发布订阅
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端
先在一个客户端1订阅
127.0.0.1:7200> SUBSCRIBE redischat
再在另一个客户端2发送
127.0.0.1:7200> PUBLISH redischat "xiaozan"
(integer) 1
此时在订阅的客户端1会输出信息1) "message"
2) "redischat"
3) "xiaozan"
从而达到了订阅效果
4.redis事务
实际上就是输入多条命令之后,按顺序一次执行。开始输入multi,执行输入exec
127.0.0.1:7200> MULTI
OK
127.0.0.1:7200> SET NUM 1
QUEUED
127.0.0.1:7200> INCR NUM
QUEUED
127.0.0.1:7200> DECRBY NUM 2
QUEUED
127.0.0.1:7200> GET NUM
QUEUED
127.0.0.1:7200> EXEC
1) OK
2) (integer) 2
3) (integer) 0
4) "0"
此外redis还可以执行脚本命令,还有连接验证功能。以后用到的时候再说,这次基本篇一就这样了。下次讲redis在php里面的应用,可能结合yii框架来说明。