Redis

remote directory server(远程数据服务)

内存高速缓存数据库,数据模型为key-value,由C语言编写,支持丰富的数据结构:string 、hash、 list、 set、 sorted set,可持久化,保证数据安全。

###使用缓存可减轻数据库的负载。

在开发网站的时候如果一些数据在短时间内不会发生变化,而他们要被频繁访问,为了提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上或者通过较少的计算量就可以获得该数据,该行为就称作对数据的缓存。介质可以是文件、数据库、内存,内存常用于数据缓存。

###缓存的两种形式:

页面缓存常用于CMS内存管理系统里边(新闻页面);
数据缓存常用于页面的具体数据里面。

###redis 与 memcached 比较

  • redis 不仅仅支持简单的k/v类型数据,同时还提供 list、set、zset、hash等数据结构的存储;
  • redis 支持master-slave(主-从)模式应用;
  • redis 支持数据持久化,可以将内存中的数据保持在磁盘中,重启时候可以再次加载进行使用;
  • redis 单个 value 的最大限制是 1GB ,memcached 只能保存1MB的数据

###安装redis
由于redis是运行于linux系统上的,所以得在linux系统上安装,至于windows系统下的,microsoft也有做一些模仿,可以自行去查找,下面讲的是linux上的安装

  • 首先是在官网上下载下来tar包,将其解压缩
  • redis 安装方式不同的是它 只需要在解压目录下执行 make,至于复制执行文件则由自己选择
  • src目录下有redis-cli(redis执行脚本)redis-serve(开启服务),将这两个文件复制到自己创建的执行目录下;将redis解压目录下的配置文件redis.conf也复制到执行目录下
  • 启动redis服务 ./redis-serve,redis就会在前台启动;若想要redis在后台启动,需修改conf里面的daemonize yes保存,运行redis./redis-serve redis.conf
  • 查询redis是否运行,ps -A|grep redis
  • 启动redis程序,./redis-cli

###key操作
|grammar|info|
| — | :---- |
|set key value|建立值|
| get key|获得值|
|exists key | 测试指定key是否存在 |
|del key1 key2 …| 删除指定key|
|type key | 返回指定key的类型 |
|keys pattern| 返回匹配模式的key|
|rename oldkey newkey | 重命名key |
|expire key seconds | 为key指定过期时间 |
|ttl key | 返回key剩余过期时间 |
|select db-index(0-15)|选择数据库|
|dbsize|返回当前数据库key数量|
|move key db-index|移动key到指定数据库|
|flushdb|删除当前数据库中的key|
|flushall|删除所有key|


###string 类型操作
|grammar|info|
| — | :---- |
|set key val|设置key值|
|mset key1 val1 key2 val2…|一次性设置多个值|
|mget key1 key2 …|一次性获取多个值|
|incr key | 对key进行加1|
|decr key | 对key进行减1|
|incrby key integer | 对key进行加integer|
|decrby key integer| 对key进行减integer|
|append key value | 对key进行连接value|
|substr key start end|返回截取的字符串|


###list 类型数据
list实质是一个双向链表。通过push pop 操作从链表的头部和尾部进行添加、删除的操作,使得list既可以作为栈,又可以作为队列
|grammar|info|
| — | :---- |
|lpush key string|在key对应list头部添加字符串元素|
|rpush key string |在尾部添加元素|
|rpop key |在list的尾部删除元素,并返回删除元素|
|lpop key |从list头部删除元素,并返回删除元素|
|llen key |对应list长度,key不存在则返回0,如果key对应类型不是list,返回错误|
|lrange key start end|返回指定区间内的元素,下标从0开始|
|ltrim key start end| 截取list,保留指定区间内的元素,删除其它元素|
###set 集合类型
string类型的无序集合。最大可包含2^32-1个元素,set除了基本的添加删除操作,其它有用的操作还包含集合的并集,交集,差集。集合中的元素不能重叠。
|grammar|info|
| — | :---- |
|sadd key member|添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在则返回错误|
|srem key member|从key对应set中移除指定元素,成功返回1|
|smove p1 p2 member|从p1对应的集合中移除member并添加到p2对应集合中|
|scare key| 返回set元素个数|
|sismember key member| 判断member是否存在于set中|
|sinter key1 key2 … |返回所有给定key对应集合的交集|
|sunion key1 key2 … |返回给定的并集|
|sdiff key1 key2 …|返回给定前者的差集|
|smembers key|返回key对应集合的多有元素,无序的|


###sort set 排序集合类型
和set一样sort set也是string类型的集合,不同的是每个元素都会关联一个权,通过权可以有序地获得集合中的元素。排序集合中的每个元素都是权值结合,set只有一个值
|grammar|info|
| — | :---- |
|zadd key score member|添加元素到集合,元素在集合中存在则更新对应score|
|zrem key member|删除指定元素,1表示成功,如果元素不存在则返回0|
|zincrby key incr member|按照incr幅度增加对应member的score值,返回score值|
|zrank key member|返回指定元素在集合中的排名(下标),集合中元素按score从小到大排序|
|zrevrank key member|同上,从大到小|
|zrange key start end|类似lrange操作从集合中取出指定区间的元素,返回的是有序结果|
|zrevrange key start end |同上,返回结果是按照score逆序|
|zcard key|返回集合元素个数|
|zscore key element|返回给定元素对应的score|
|zremrangebyrank key min max|删除集合中排名在给定区间的元素|

hash
|grammar|info|
| — | :---- |
|hset key field value|设置hash field 为指定值,如果key不存在,则先创建|
|hget key field|获取指定的 hash field|
|hmget key field1 field2 …|获取全部指定的hash field|
|hmset key field1 value field2 value …|同时设置hash的多个field|
|hincrby key field integer|将指定的hash field 加上指定值|
|hexists key field|测试指定field是否存在|
|hdel key field|删除指定hash field|
|hlen key |返回指定hash的field数量|
|hkeys key|返回hash的所有field|
|hvals key |返回hash所有value|
|hgetall key|返回hash的所有 field 和 value|


###持久化功能
redis为了内部数据安全考虑,会把本身的数据以文件的形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到redis内存里面。数据保存到硬盘的过程就称为“持久化”效果。

  • snap shotting 快照持久化
    该持久化默认开启,一次性把redis中的全部数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行持久化操作。
    快照持久化在本地硬盘保留的数据备份文件:dump.rdb配置文件:dbfilename dump.rdb dir ./
    快照持久化频率:save time num time秒内有numK个数据被修改则执行操作

  • 手动持久化
    ./redis-cli bgsave
    ./redis-cli -h ip -p 3379 bgsave

  • append only file (AOF持久化)
    把用户执行的每个写指令(添加、修改、删除)都备份到文件中,还原数据的时候就执行具体指令
    开启AOF持久化(会清空redis内部数据)
    appendonly yes appendfilename appendonly.aof
    关闭执行脚本exit
    杀死进程kill -9 7287
    aof 频率 appendfsync everysec
    aof文件优化压缩 ./redis-cli bgrewriteaof

相关指令:
./redis-cli lastsave 返回上次保存成功unix时间戳
./redis-cli shutdown 同步保存到服务器并关闭redis

###主从模式
为了减低redis服务器的负载,可以设置多个redis服务器。其中一个服务器负载“写”操作(添加、修改、删除),其它负载负责“读”操作,主服务器数据会自动同步数据给从服务器。

开启作为从服务器slaveof ip port
从服务器默认禁止写入操作 slave-read-only yes

###php安装redis扩展
需要安装包 phpredis.tar.gz autoconf.tar.gz

  • 首先安装phpredis依赖包autoconf
    首先解压autoconf,不需要做配置,./configure && make && make install若出现下面问题:
Can't locate Data/Dumper.pm in @INC (@INC contains: ../lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ../lib/Autom4te/C4che.pm line 33.

并不是系统缺失perl,而是缺少Data/Dumper,执行下列代码

yum install perl-Data-Dumper -y
  • 安装phpredis
    在解压的phpredis目录内执行/usr/local/php/bin/phpize,目的是为了将redis加入php的扩展。
[root@localhost phpredis-master]# /usr/local/php/bin/phpize 
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
configure.in:3: warning: prefer named diversions
configure.in:3: warning: prefer named diversions

对phpredis 进行配置

[root@localhost phpredis-master]# ./configure --with-php-config=/usr/local/php/bin/php-config

接着执行make , make install执行结果可看到生成扩展文件在哪里

[root@localhost phpredis-master]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

[root@localhost phpredis-master]# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
总用量 784
-rwxr-xr-x. 1 root root 799928 5月  24 13:33 redis.so


在php配置文件/lib/php.ini中引用该扩展extension=redis.so
启动apache bin/apachectl start
使用本机访问虚拟主机,可见redis扩展安装成功。

###php操作redis

  • 在php里边,redis就是一个功能类Redis,Redis类里边有许多成员方法(名字基本与redis指令名字一致,参数也一致)
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->select($index);
$redis->set('name','bee');
$redis->mset(array('author'=>'ligbee','db'=>'redis'));
  • 利用反射感知redis类的全部操作方法
//实例化一个反射类对象
$redis = new ReflectionClass('Redis');
//获得类的全部操作方法
var_dump($redis->getMethods());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值