1,redis和memcache差别
2,取数据
读取键名为post:1散列类型键的title字段的值:
HGET post:1 title
3,安装--省略
4,常用命令
redis-server 启动
redis-cli SHUTDOWN 停止
select 1 选择1号数据库
GET foo 正在使用的数据库是哪个
SET bar 1 建立一个名为Bar的键
KEYS * 获取所有redis中的键 , 遍历循环redis中所有的键,影响性能,不建议使用
EXISTS key 判断是否有某个键,存在返回1,否则返回0
DEL key 删除key
redis-cli KEYS "user:*" | xargs redis-cli DEL 删除所有以user:开头的键
TYPE key 获得键值的类型
INCR num 如果值是以整数形式存在,则会递增,值不存在时候会报错
对象类型(复数形式):count 的键来存储当前类型对象的数量,每次都会使用INCR递增
INCRBY bar 2 增加指定的整数
DECR key 减少指定的整数
INCRBUFLOAT key increment 增加制定浮点数
APPEND key value 向尾部追加值
STRLEN key 获取字符串长度
MGET key [key ...] 同时获取多个值
MSET key value [key value ...] 同时设置多个值
1.【 set key value 】 存入一个key和值。如:set myname reson
2.【 get key 】 读取一个key的值。
3.【 del key 】 删除一个key。
4.【 del key1 key2 ... keyN 】 删除多个key。如:del myname1 myname2
5.【 exists key 】 判断一个key是否存在。
6.【 type key 】 查看key的类型。
7.【 rename key keyNew 】 重命名key名。如:rename myname myname2
8.【 dbsize 】 查看当前库中的key的条数。
9.【 expire key time 】 指定key的过期时间,单位为秒。如:expire myname 9(设置9秒后过期)
10.【 ttl key 】 查看redis有多长时间过期,单位为秒。
11.【 keys * 】 列出当前库中所有的key名。
12.【 keys a* 】 列出当前库中所有以字符串“a"开头的key。
13.【 select db-index 】 选择一个数据库,如选择第一个数据库:select 0;选择第二个 select 1;默认有16个数据库,这个值可以在redis.conf中配置。
14.【 flushdb 】 清掉当前库中所有的key(生产环境下需谨慎操作)。
15.【 flushall 】 清掉所有库中全部的key(生产环境下需谨慎操作)。
1.【 mset key1 value1 key2 value2 ... keyN valueN 】 一次性存入多个key和值。
2.【 mget key1 key2 ... keyN 】 一次性读取多个key。
3.【 incr key 】 可以对key类型+1的操作(相当于编程语言里面的++),只能操作number型,操作字符串会报错。可对新值进行操作。
4.【 decr key 】 可以对key类型-1的操作(相当于编程语言里面的--),只能操作number型,操作字符串会报错。
5.【 incrby key num 】 同incr,对key的值加num,比如 incrby aa 10,对aa+10。
6.【 decrby key num 】 同上,对key的值减num。
7.【 append key value 】 对指定key的字符串进行追加,如果key为整形,会被转为字符串。如aa的值为9,执行append aa 10后,会变成910。
8.【 substr key start end 】 对key进行截取start到end个字符。如aa的值为:abcdef,执行substr aa 2 3后,返回“cd”。
列表命令:
LPUSH key value [value ...] 向列表两端增加数据
RPUSH key value [value ...] LPUSH numbers 2 3 增加多个
LPOP numbers 从列表了断弹出数据
RPOP numbers
LLEN key 获取列表中元素的个数
LRANGE numbers 0 2 获取列表片段
LREM key count value 删除列表中指定的值 大于0从左边删除,小于0从右边删,等于0全部删除
EXPIRE命令设置一个键的生存时间,到了时间Redis会自动删除他
SET session:29e3d uid1314 expire session:29e3d 900
(inerger) 1 //返回1表示设置成功,返回0则表示键不存在或者设置失败
TTL命令知道键还有多长时间被删除
SET foo bar //设置键值 EXPIRE foo 20 //设置键时间 TTL foo //查询还有多少,不存在返回-1(或者永久存在)
PERSIST foo //设置为永久时间
5,修改配置文件
通过redis-server的启动参数port设置redis的端口号,还有是否开启持久化,日志级别等。
redis-server /path/to/redis.conf
redis.conf文件
6,SET字符串例子
<?php //加载Predis库的自动夹杂函数 require './predis/autoload.php'; //连接redis $redis = new PredisClient(array( 'host' => '127.0.0.1', 'port' => 6379 )); if($_GET['name']){ $redis->set('name',$_GET['name']); } $name = $redis->get('name'); ?>
例子,获取总长度
redis>SET key hello OK redis>APPEND key " world!" (integer)12
7,事务
redis>NULTI OK redis>SADD "user:1:following" 2 QUEUED redis>SADD "user:2:following" 2 QUEUED redis>EXEC 1)(integer) 1 1)(integer) 2
先使用MULTI命令告诉Redis:"下面我发给你的命令属于同一个事务,你先不要执行,把他们存储起来".Redis回答可以
接下来发送了两个SADD命令来实现关注和被关注,Redis返回QUEUED表示这两条命令已经进入被执行的事务队列当中了。
当把所有同一个事务的命令都发布给Redis后,我们使用EXEC命令告诉Redis将等待执行的事务队列中所有的命令(即刚才所有返回QUEUED的命令)按照发送顺序依次执行。EXEC命令的返回值就是这些命令的返回值组成的列表,返回顺序和命令的顺序相同。
Redis不支持事务回滚
$isKeyExists = EXISTS rate.limiting:$IP if $isKeyExists is 1 $times = INCR rate.limiting:$IP if $times > 100 print 访问频率超过了限制,请稍后再试 exit else MULTI INCR rate.limiting:$IPEXPIRE $keyName,60 EXEC
一分钟只能访问100次