Redis
redis是什么?
redis是开源BSD许可,高级的key-value储存系统
可以用来储存字符串哈希结构,链表,集合,因此常用来提供数据结构服务。
redis和Memcached相比的独特之处
1:redis可以用来做存储(storge),而Memcached是用来做缓存(cache)
这个特点只要因为其有“持久化”的功能
2:存储的数据有“结构”,对于Memcached来说,存储的数据,只有1种类型——“字符串”
而redis则可以存储字符串,链表,哈希结构,集合,有序集合。
安装:去官网redis.io下载
先cd到放置压缩包的文件夹下
然后wget 下载
ls查看下载内容
解压源码并进入目录
tar zxvfredis-......(下载的压缩包)
cd redis-.....(解压后的文件夹)
直接make安装
make之后会提示你在执行make test,如果没安装test扩展(安不安都行,建议安装能查看安装时有没有出错)
安装test:yum installtcl 会提示你是否找到一个适合安装的
安装完成之后 再maketest 看看我们的系统满不满足安装需求,编译有没有出错(闲时间慢可以直接终止)
将redis安装到指定的目录
makePREFIX=/usr/local/redis install
cd 进入redis目录
cd/usr/lcoal/redis/
ls 查看里面文件
拷贝一份配置文件到redis文件夹(从源代码目录中redis下拷贝一份给定的配置文件)
cp /usr/local/src/redis-....../redis.conf./
启动连接
./bin/redis-server ./redis.conf
(他的端口是6379)
此时退出会将其关闭(还没有做后台运行)
让redis以后台进程的方式运行
vim redis.conf
修改:
daemonize yes
wq 保存
再运行./bin/redis-server ./redis.conf(此时没有任何效果以为已在后台运行了)
ps aux|grepredis (查看进程)
./bin/redis-cli (连接redis)
set site www.liouba.com (添加一个缓存)
get site (查看)
【问题】1.时间问题
由于下载时官方进行过congifure过生成的时间有时间戳信息
Make操作只能在configure之后,如果你的虚拟机时间不对,比如是2013年的(这个时候就会报错)
解决办法:date -s ‘yyy-mm-ddhh:mm:ss’ 重写时间
再clock-w 写入cmos
Redis 安装就此完成
=
=
=
《——————Redis对于key的通用操作命令———————》
./bin/redis-cli (连接redis)
set site www.liouba.com (添加一个缓存)
get site (查看)
在redis里允许迷糊查询key
有3个通配字符 * ? []
*:匹配任意多个字符 keys * ,keys s*
?:匹配单个字符 keyssi?e
[]:匹配括号内的某一个字符 keys sit[ey]
randomkey返回随机的key名
type key 返回key值储存的类型(type stie)
有string,link,set,order,hash
exists key 判断key是否存在返回1/0 (exists site)
del key 删除一个或多个key(返回值:不存在的key忽略,删除真正存在的key的数量)
rename key newkey 给key改名字
renamenx key newkey 把key改名为newkey 返回:发上修改返回1,否则返回0
注:nx -> not exists,即newkey不存在时,做改写动作否则不执行动作
redis.conf中 databases 16 (redis默认有16个数据库【可以更改】)从0到15默认是0号数据库
move key db 【key:键名,db:数据库编号】
例如: move site 1 (将所在数据库中的site键放入1号数据库中)
redis多数用来做储存,也可以做缓存,可以设置有效期的用
expire key 整型值(以秒为单位)设置生命周期
pexpire key 毫秒数 设置生命周期
ttl key 查看key的生命周期(返回秒数) “ -1 ” 代表永久有效【对于不存在的key或已过期的key/不过期的key都返回-1,redis 2.8或以上返回的是-2】
pttl key 毫秒返回生命周期
persist key 把key设置成永久有效
《————————————以上是对key的通用操作————————————》
《———————————对key的其他类型的操作———————————》
一、set即操作字符串类型
set key value [ex 秒数 / px 毫秒] [nx / xx]
ex px 同时应用会议后面的为准(毫秒)
nx :表示key不存在时执行操作
xx:表示key存在的时执行操作(也就是更改)
mset key1 value key2 value key3 value ...(设置多个key)
mget key1 key2 key3 (获取多个key的值)
setrange key offset value
作用:把字符串的offset偏移字节,改成value
注:如果偏移量大于字符串长度,多出的部分会自动补全\X00
append key value 把value值追加到key原值上
getrange key start stop 获取【start到stop】范围内的值(包括star和stop的值)
注:start>=length 返回空字符串
stop>=length 则截取值字符串结尾
如果start所处位置在stop右边,返回空字符串
stop可以是倒数的(倒数从-1开始),如:getrange key 0 -3 ,[从零到倒数第3个字节]
getset key newvalue 获取并返回旧值,设置新值
incr key 指定的key的值加1,并返回加1的值
decr key 指定的key的值减一,并返回减一的值
Incrby key number 指定的key的做增加number个值,并返回增加后的值
Incrbyfloat key number.number 增加浮点型数字 如incrbyfloat site 3.4
setbit key offset value 设置offset对应二进制位上的值,返回该位上的旧值
注:如果offset过大,则会在中间填充0。
还可以将改变大小写 setbin site 2 1(改成小写) setbin site 2 0 (改成大写)
Offset最大是2^32-1,可以退出最大的字符串为521M
《——————还有许多的操作就不一一举例—————》
redis事务及锁应用:
用multi(开启redis事务[multi有多的意思,也就是接下来我要执行多个事务])
Mysql 与redis对比
| Mysql | Redis |
开启 | start transaction | multi |
语句 | 普通sql | 普通命令 |
失败 | rollback 回滚 | discard 取消 |
成功 | commit | exec |
在mutil后面的语句中, 语句出错可能有2种情况
1: 语法就有问题,
这种,exec时,报错, 所有语句得不到执行
2: 语法本身没错,但适用对象有问题. 比如 zadd 操作list对象
Exec之后,会执行正确的语句,并跳过有不适当的语句.
(如果zadd操作list这种事怎么避免? 这一点,由程序员负责)
watch监控事务 例watch key (可以监视多个key【如果多个key中有任意一个key又变拿事务将取消】)
unwatch 取消监控
《——————PHP与redis的扩展编译——————》
2、下载stable版(稳定版)扩展
3、解压
4、执行/php/path/bin/phpize(作用是检测PHP的内核版本,并为扩展生成相应的编译配置)
5、cd /usr/local/src/ (进入压缩包文件夹)
6、wget http://pecl.php.net/get/redis-2.2.7.tgz 下载压缩包
7、tar zxvf redis-2.2.7.tgz 解压
8、cd redis-2.2.7
9、/usr/local/webserver/php/bin/phpize 由于没源代码中没有php.config所有要根据php的版本生成config
10、./configure --with-php-config=/usr/local/webserver/php/bin/php-config
11、make && makeinstall
引入编译出的redis.so插件
1、编辑php.ini
2、添加php.ini 中 extension=redis.so
3、重启php
pkill -9 php-fpm
/usr/local/webserver/php/sbin/php-fpm
redis使用
测试客户端
进入www下创建一个redis.php(随便一个就行)
<?php
$redis = new Redis();
Var_dump($redis);
?>
在浏览器中浏览
《———以上已全部OK,下面试项目中的应用———》