听雷哥浅谈Redis

Linux下安装redis

1、下载源码,解压缩后编译源码

$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz

$ tar xzf redis-2.8.3.tar.gz

$ cd redis-2.8.3

$ make  make install

 2、编译完成后,在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下

mkdir /usr/redis

cp redis-server  /usr/redis

cp redis-benchmark /usr/redis

cp redis-cli  /usr/redis

cp redis.conf  /usr/redis

cd /usr/redis

3、启动Redis服务。

$ redis-server   redis.conf

4、然后用客户端测试一下是否启动成功。

$ redis-cli

redis> set foo bar

OK

redis> get foo

"bar"

redis操作

string数据类型

set name zhilei

get name

setnx   #如果key不存在则设置,如果存在,则返回0

setex  name 10 zhilei  #声明一个变量,且加上超时时间

set email  wangzhilei@jd.com #对于这个声明好的变量进行部分内容进行更改

setrange  email 3 wulong@jd.com

get email  

wangwulongok@jd.com

mset name zhilei age 10  #批量的赋值

msetnx  #批量设置,如果有一个key存在的话,则返回0

mget name age  #批量的取值

incr age #让一个值递增1          

incrby age 10  #让一个值递增固定的值      

decr age #让一个值递减

decrby age 100 #让一个值递减固定的值

getset name  yinchao #重新给一个变量赋值,但是返回原来的变量的值

getrange email 0 6  #返回一个字符串的部分内容

append name aa #给一个key加入相关的内容

strlen name    #获取一个key的值的长度

hashes 类型

hset      #设置

hsetnx    #如果不存在的话,则设置

hget      #获取

hmset     #批量赋值

hmget     #批量获取

hlen      #显示字段的个数

hincrby   #递增

hexists   #判断hashed key是否存在 如果存在的话,则返回1,如果不存在的话,则返回0

hkeys     #返回hashed下面所有的字段

hvals     #返回hashes对象下面所有的值

hgetall   #key val 一起获取

hdel      #删除hash对象下面某个key的某个字段

list类型

栈存入

lpush list1  zhilei 10   #向栈里面加入两个值

lrange list1 0 -1       #取这个栈内的数据

队列存入

rpush

Linsert list1 before “one” “two”  #插入

Lset                          #将一个值修改

Lrem                         #删除队列中几个相内的内容

Ltrim                         #删除非指定key范围内的值 ,其它的都删除

Lpop                         #从list从头弹出一个元素

Rpop                         #从尾部弹出

Rpoplpush                    #将一个链表的尾部的元素弹出,赋给第二个链表的头部

Lindex                        #按索引来取值

Sets与zset类型 (集合数据类型)  注意:集合内部不能有重复的值

特点:无序

方法

Sadd  name zhilei   #给name集合设置值

Smembers name     #取name集全下面所有的值

Srem   name zhieli  #删除name集合下面的zhilei

Spop   name       #随机的弹出一个值,(删除弹出的值)

Sdiff   set1 set2             #两个集合的差集

Sdiffstore  set3 set1 set2     #将前两个集合差集存到set3中

Sinter   set1 set2           #取两个集合的交集

Sinterstore    set1 set2 set3  #将后面的两个集合的交集存话到set1中

Sunion     set1  set2       #取两个集合的并集

Sunionstore  set3 set1 set2   #两set1 set2两个并集到set3中

Smove  set1 set2  name    #将第一个集合内的一个值放到set2中

Scard                       #查看集合内元素的个数

Sismember    set1 one              #判断一个元素是否为一个集合的元素

Srandmember    set1            #随机取一个元素,但不删除元素

有序集合 stored sets

Zadd   #添加元素  例:Zadd  class 1 one

Zrange class 0 -1 withscores   #取值(withscores将排行号给取出来 )

Zrem class one         #删除一个元素,返回1的话 则代表删除成功

Zincrby                #给指定的顺序增加 例子:zincrby zsets  3 one   将集合zsets 中元素one的排序加上3

Zrank                  #按score排序列从小到大排序 ,并返回一个元素的索引      这个是按score的升序来排序

Zrevrank               #按排序列从大到小排序 ,并返回一个元素的索引            这个是按score的降序来排序

Zrevrange              #倒序,然后取索引范围  withscores 加上排序值   也就是说这个是按索引来倒过来排序

Zrangebyscore         #按排序范围值来取

Zcount                #返回区间内空的个数  也是按score来取个数

Zcard                         #返回集合中所有的元素的个数

Zremrangebyrank   set1 0 1  #按索引来删除

Zremrangebyscore  #set 0 2  #按排序来删除

Redis常用命令

Keys *  输出所有的键

Exists   #判断一个键是否存在

Del    #删除一个键

Expire  #设置一个键的过期时间

Ttl      #查看一个key的过期时间

Move  age 1   #将一个数据库的key age 剪切到1数据库

Persist age      #取消过期

Randomkey      #随机返回一个key

Rename         #给一个key重命名

Type            #返回key的数据类型

服务器相关的命令

Ping

Echo   

Select  0-15  共15个数据库

Quit 或者是 exit

Dbsize     #返回当前数据中key总量

Info       #获取服务器的信息

Config get  #实时传储收到请求

Flushdb    #删除当前数据库所有库

Flushall    #删除所有数据库的所有key

Redis高级应用

  1. 1.   安全性
  2. 2.   主从复制
  3. 3.   事务处理
  4. 4.   持久化机制
  5. 5.   发布订单消息
  6. 6.   虚拟内存的使用

安全性:

在配置文件中 修改requirepass 后面直接是redis密码

Auth passwd 来登录进去 或者是登录时候 用  -a 密码

主从复制:

  1. 在从机配置slaveof
  2. 配置masterauth 
  3. 判断哪个是主 哪个是从只要命令info

Redis事务处理

Multi

中间是事务的内容

如果想回滚discard

Exec

乐观锁

用watch来监控一个key,并执行事务,这个时候,如果有另外的一个session来改变这个key值,则这个key版本的值已经不是最新的了,这样的话,则事务则不会执行成功

相当于svn 与givhub  如果服务器上面的版本为4 如果将上传的版本改为3,则不能上传成功,必须为4以上的版本

例:

Session1:

127.0.0.1:6379> get name

"aaaaaa"

127.0.0.1:6379> WATCH name

OK

127.0.0.1:6379> multi

OK

127.0.0.1:6379> set name zongbin

QUEUED

127.0.0.1:6379> exec

(nil)

Session 2:

Set name newword

Redis持久化机制

两种方式:

Snapshotting 快照 相当于mysqldump

Append-only file 缩写aof的方式 给操作进行备份 相当于mysql中的bin-log日志

消息发布与订阅

Session1发布如下Publish  message1  hello

Session2 订阅如下Subscribe message

虚拟内存  2.6之后就弃用了

              

php-redis扩展安装方法

PHP 使用 Redis

安装

开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases。

PHP安装redis扩展

以下操作需要在下载的 phpredis 目录中完成:

$ wget 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

如果你是 PHP7 版本,则需要下载指定分支:

git clone -b php7 https://github.com/phpredis/phpredis.git

修改php.ini文件

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

增加如下内容:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626"

extension=redis.so

安装完成后重启php-fpm 或 apache。查看phpinfo信息,就能看到redis扩展。

PHP 使用 Redis

连接到 redis 服务

<?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

Redis PHP List(列表) 实例

<?php

   //连接本地的 Redis 服务

   $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");

   // 获取存储的数据并输出

   $arList = $redis->lrange("tutorial-list", 0 ,5);

   echo "Stored string in redis";

   print_r($arList);

?>

执行脚本,输出结果为:

Connection to server sucessfully

Stored string in redis

Redis

Mongodb

Mysql

Redis PHP Keys 实例

<?php

   //连接本地的 Redis 服务

   $redis = new Redis();

   $redis->connect('127.0.0.1', 6379);

   echo "Connection to server sucessfully";

   // 获取数据并输出

   $arList = $redis->keys("*");

   echo "Stored keys in redis:: ";

   print_r($arList);

?>

执行脚本,输出结果为:

Connection to server sucessfully

Stored string in redis::

tutorial-name

tutorial-list

原文地址:https://www.cnblogs.com/leigepython/p/8595885.html