redis服务端安装(环境linux+php7)

windows版redis下载地址 https://github.com/MicrosoftArchive/redis/releases
运行windows版本redis报如下错误:

C:\Program Files\Redis>redis-server.exe redis.windows.conf
[10924] 20 Jun 16:36:01.148 # Creating Server TCP listening socket *:6379: bind:
 Unknown error

执行以下命令即可解决以上问题.

C:\Program Files\Redis>redis-cli.exe
127.0.0.1:6379> shutdown
not connected> exit

官网下载地址 https://redis.io/download

①wget http://download.redis.io/releases/redis-5.0.3.tar.gz

②tar zxvf redis-5.0.3.tar.gz

③cd redis-5.0.3

④make

⑤cd src

⑥make install

redis配置文件位置
/usr/local/src/redis-5.0.3/redis.conf
执行redis相关程序
/usr/local/src/redis-5.0.3/src/redis-server

vi redis.conf,将daemonize属性改为yes(表明需要在后台运行),按ESC进入Command模式,然后输入“:wq”,回车就可以保存并退出了

/usr/local/src/redis-5.0.3/src/redis-server /usr/local/src/redis-5.0.3/redis.conf

参考地址:https://www.cnblogs.com/wangchunniu1314/p/6339416.html

配置文件设置

放开所有ip访问 bind 0.0.0.0

设置密码 requirepass foobared

php redis扩展安装

php redis扩展地址:http://pecl.php.net/package/redis

比较简单,暂时省略。

windows下启动redis服务端

redis-server.exe redis.conf

windows下启动redis客户端

redis-cli.exe

redis连接

   $redis = new Redis();    
   //短链接,本地host,端口为6379,超过20秒放弃链接
   $redis->connect('127.0.0.1', 6379,20);    
   echo "Connection to server sucessfully";
   //查看服务是否运行
   echo "Server is running: " . $redis->ping();
 
   输出如下:
   Connection to server sucessfullyServer is running: +PONG

REDIS命令

Redis 键相关的基本命令

DUMP key
序列化给定 key ,并返回被序列化的值。
执行DUMP humor,报如下错误:
(error) ERR unknown command ‘DUMP’
可用版本 >= 2.6.0

EXISTS key
检查给定 key 是否存在。

redis 127.0.0.1:6379> exists humor
(integer) 1

EXPIRE key seconds
为给定 key 设置过期时间,以秒计。

redis 127.0.0.1:6379> expire humor 10
(integer) 1

KEYS pattern
查找所有符合给定模式( pattern)的 key 。

redis 127.0.0.1:6379> keys hum*
1) "humor"

DEL key
该命令用于在 key 存在时删除 key。

redis 127.0.0.1:6379> del humor
(integer) 1

Redis 字符串命令

SET key value
设置指定 key 的值

redis 127.0.0.1:6379> set humor haha
OK

GETRANGE key start end
返回 key 中字符串值的子字符

redis 127.0.0.1:6379> GETRANGE humor 1 2
"ah"

GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

redis 127.0.0.1:6379> GETSET humor cry
"haha"

MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。

redis 127.0.0.1:6379> MGET humor name
1) "cry"
2) "xiaoming"

Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 – 1 键值对(40多亿)。

HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。

redis 127.0.0.1:6379> HSET hashdemo description 'one description'
(integer) 1

HGETALL key
获取在哈希表中指定 key 的所有字段和值

redis 127.0.0.1:6379> HGETALL hashdemo
1) "name"
2) "haha"
3) "description"
4) "one description"

HGET key field
获取存储在哈希表中指定字段的值。

redis 127.0.0.1:6379> HGET hashdemo name
"haha"

HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。

redis 127.0.0.1:6379> HEXISTS hashdemo name
(integer) 1

HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。

redis 127.0.0.1:6379> HSET hashdemo field 1
(integer) 1
redis 127.0.0.1:6379> HINCRBY hashdemo field 3
(integer) 4

HKEYS key
获取所有哈希表中的字段

redis 127.0.0.1:6379> HKEYS hashdemo
1) "name"
2) "description"
3) "field"

HVALS key
获取哈希表中所有值

redis 127.0.0.1:6379> HVALS hashdemo
1) "haha"
2) "one description"
3) "2"
4) "3"

HKEYS key
获取所有哈希表中的字段

redis 127.0.0.1:6379> HKEYS hashdemo
1) "name"
2) "description"
3) "field"
4) "field2"

Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 – 1 个元素 (4294967295, 每个列表超过40亿个元素)。

LPUSH key value1 [value2]
将一个或多个值插入到列表头部

redis 127.0.0.1:6379> LPUSH listdemo listvalue1
(integer)

BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

redis 127.0.0.1:6379> BLPOP listdemo 100
1) "listdemo"
2) "listvalue1"
redis 127.0.0.1:6379> BLPOP listdemo 10
(nil)
(10.39s) (无元素阻塞列表)

BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

LINDEX key index
通过索引获取列表中的元素,index从0开始

redis 127.0.0.1:6379> LPUSH listdemo 11
(integer) 1
redis 127.0.0.1:6379> LPUSH listdemo 12
(integer) 2
redis 127.0.0.1:6379> LPUSH listdemo 13
(integer) 3
redis 127.0.0.1:6379> LINDEX listdemo 1
"12"

LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素

redis 127.0.0.1:6379> LINSERT listdemo BEFORE 12 11.5
(integer) 4
redis 127.0.0.1:6379> LRANGE listdemo 0 -1
1) "13"
2) "11.5"
3) "12"
4) "11"

LLEN key
获取列表长度

redis 127.0.0.1:6379> LLEN listdemo
(integer) 4

LPOP key
移出并获取列表的第一个元素

redis 127.0.0.1:6379> LPOP listdemo
"13"

RPOP key
移除列表的最后一个元素,返回值为移除的元素。

redis 127.0.0.1:6379> RPOP listdemo
"11"

Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

SADD key member1 [member2]
向集合添加一个或多个成员

redis 127.0.0.1:6379> sadd setdemo mysql
(integer) 1
redis 127.0.0.1:6379> sadd setdemo redis
(integer) 1
redis 127.0.0.1:6379> sadd setdemo mysql
(integer) 0
redis 127.0.0.1:6379> sadd setdemo mongo
(integer) 1

SCARD key
获取集合的成员数

redis 127.0.0.1:6379> SCARD setdemo
(integer) 3

SDIFF key1 [key2]
返回给定所有集合的差集,差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。

setdemo = {mysql,redis,mongo}
setdemo2 = {mysql,memcached}
redis 127.0.0.1:6379> sadd setdemo2 mysql
(integer) 1
redis 127.0.0.1:6379> sadd setdemo2 memcached
(integer) 1
redis 127.0.0.1:6379> SDIFF setdemo setdemo2
1) "redis"
2) "mongo"
redis 127.0.0.1:6379> SDIFF setdemo2 setdemo
1) "memcached"

SDIFFSTORE destination key1 [key2]
返回给定所有集合的差集并存储在 destination 中

redis 127.0.0.1:6379> SDIFFSTORE setdemo3 setdemo setdemo2
(integer) 2

SMEMBERS key
返回集合中的所有成员

redis 127.0.0.1:6379> SMEMBERS setdemo
1) "redis"
2) "mongo"
3) "mysql"

SPOP key
移除并返回集合中的一个随机元素

SREM key member1 [member2]
移除集合中一个或多个成员

redis 127.0.0.1:6379> SREM setdemo 'haha'
(integer) 0
redis 127.0.0.1:6379> SREM setdemo mysql
(integer) 1

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

ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合成指定区间内的成员

redis 127.0.0.1:6379> ZADD zdddemo 2 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD zdddemo 3 memcached
(integer) 1
redis 127.0.0.1:6379> ZRANGE zdddemo 0 5 WITHSCORES
1) "mysql"
2) "2"
3) "memcached"
4) "3"

ZCOUNT key min max
计算在有序集合中指定区间分数的成员数

redis 127.0.0.1:6379> ZCOUNT zdddemo 3 5
(integer) 1

ZRANK key member
返回有序集合中指定成员的索引

redis 127.0.0.1:6379> ZRANGE zdddemo 0 -1 WITHSCORES
 1) "oracle"
 2) "-1"
 3) "mysql"
 4) "2"
 5) "memcached"
 6) "3"
 7) "redis"
 8) "7"
 9) "postgresql"
10) "8"
redis 127.0.0.1:6379> ZRANK zdddemo redis
(integer) 3
redis 127.0.0.1:6379> ZRANK zdddemo oracle
(integer) 0

ZREM key member [member …]
移除有序集合中的一个或多个成员

redis 127.0.0.1:6379> ZREM zdddemo oracle
(integer) 1

ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

redis 127.0.0.1:6379> ZRANGE zdddemo 0 -1 WITHSCORES
1) "mysql"
2) "2"
3) "memcached"
4) "3"
5) "redis"
6) "7"
7) "postgresql"
8) "8"
redis 127.0.0.1:6379> ZREVRank zdddemo redis
(integer) 1

ZSCORE key member
返回有序集中,成员的分数值

redis 127.0.0.1:6379> ZSCORE zdddemo redis
"7"

Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

批量操作在发送 EXEC 命令前被放入队列缓存。
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
开始事务。
命令入队。
执行事务。

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> set queuedemo haha
QUEUED
redis 127.0.0.1:6379> GET queuedemo
QUEUED
redis 127.0.0.1:6379> LPUSH list1 haha
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "haha"
3) (integer) 2

DISCARD
取消事务,放弃执行事务块内的所有命令。

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET setdemo2 haha
QUEUED
redis 127.0.0.1:6379> GET setdemo2
QUEUED
redis 127.0.0.1:6379> DISCARD
OK
redis 127.0.0.1:6379> GET setdemo2
(error) ERR Operation against a key holding the wrong kind of value

设置和获取字符串

   $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");
   //释放资源
   $redis->close();
 
    输出如下:
   Connection to server sucessfullyStored string in redis:: Redis tutorial

设置和获取列表

   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "Connection to server sucessfully";
   //存储数据到列表中
   $redis->lpush("tutorial-list", "Redis");
   $redis->lpush("tutorial-list", "Mongodb");
   $redis->lpush("tutorial-list", "Mysql");
   // 获取存储的数据并输出
   // 区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素 
   $arList = $redis->lrange("tutorial-list", 0 ,5);    //输出第一个到第六个元素
   echo "Stored string in redis";
   echo '<pre>';
   print_r($arList);
 
输出如下
Connection to server sucessfullyStored string in redis
Array
(
   [0] => Mysql
   [1] => Mongodb
   [2] => Redis
   [3] => Mysql
   [4] => Mongodb
   [5] => Redis
)

获取所有keys并输出

   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   echo "Connection to server sucessfully";
   // 获取所有keys并输出
   $arList = $redis->keys("*");
   echo "Stored keys in redis:: ";
   echo '<pre>';
   print_r($arList);
 
输出如下:
Array
(
[0] => intxx
[1] => int1
[2] => cachephp
[3] => tutorial-list
[4] => set1
[5] => redis_que
[6] => tutorial-name
[7] => intx
[8] => abc
[9] => in1
[10] => in2
[11] => redis_queue1447
[12] => myabc
[13] => list1
[14] => list2
[15] => mykey
[16] => intx1
[17] => hash1
[18] => redis_queue147
)

设置过期时间

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//设置成功返回true,失败返回false,key不存在设置失败
//10s后失效
$res=$redis->expire('myabc',10);
$redis->close();
var_dump($res);
 
输出如下:
true

获取key的长度

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$res=$redis->get('intxx');     //   13
$length = $redis->strlen('intxx');
echo $length;
 
输出如下:
2

追加字符串

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo $redis->get('intxx');     //   13
echo $redis->append('intxx','append');   // 返回追加后的个数8
echo $redis->get('intxx');

自增自减

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('one_int',33);    //33
echo $redis->get('one_int');
$redis->incr('one_int',22);    //第二个参数为增加的个数,可选,空为1
echo $redis->get('one_int');  //55
$redis->decr('one_int',1);    //
echo $redis->get('one_int');  //54

参考地址

https://www.cnblogs.com/wenxinphp/p/6016449.html
https://www.cnblogs.com/aipiaoborensheng/p/5666005.html

发表评论

邮箱地址不会被公开。 必填项已用*标注