redis-cli 命令总结

发表时间:2012-02-22 05:14:15 文章分类:redis 阅读:1095
1、连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证2、对value操作的命令 exists(key):确认一个key是否存在 del(key):删除一个key type(key):返回值的类型 keys(pattern):返回满足给定pattern的所有key randomkey:随机返回key空间的一个key rename(oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key dbsize:返回当前数据库中key的数目 expire:设定一个key的活动时间(s) ttl:获得一个key的活动时间 select(index):按索引查询 move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库 flushdb:删除当前选择数据库中的所有key flushall:删除所有数据库中的所有key3、对String操作的命令 set(key, value):给数据库中名称为key的string赋予值value get(key):返回数据库中名称为key的string的value getset(key, value):给名称为key的string赋予

php redis 使用

发表时间:2012-02-22 05:13:55 文章分类:redis 阅读:12625
//普通set/get操作$redis->set('library', 'predis');$retval = $redis->get('library');echo $retval; //显示 'predis'//setex set一个存储时效$redis->setex('str', 10, 'bar'); //表示存储有效期为10秒//setnx/msetnx相当于add操作,不会覆盖已有值$redis->setnx('foo',12); //true$redis->setnx('foo',34); //false//getset操作,set的变种,结果返回替换前的值$redis->getset('foo',56);//返回34// incrby/incr/decrby/decr 对值的递增和递减$redis->incr('foo'); //foo为57$redis->incrby('foo',2); //foo为59//exists检测是否存在某值$redis->exists('foo');//true//del 删除$redis->del('foo');//true//type 类型检测,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash$redis->type('f

phpredis api 中文说明

发表时间:2012-02-22 03:56:03 文章分类:redis 阅读:4103
Redis::__construct构造函数$redis = new Redis();connect, open 链接redis服务参数host: string,服务地址port: int,端口号timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)注: 在redis.conf中也有时间,默认为300pconnect, popen 长链接,即不会主动关闭的链接,需要手工关闭参考上面setOption 设置redis模式getOption 查看redis设置的模式ping 查看连接状态get 得到某个key的值(string值)如果该key不存在,return falseset 写入key 和 value(string值)如果写入成功,return turesetex 带生存时间的写入值$redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.setnx 判断是否重复的,写入值$redis->setnx('key', 'value');$redis

redis配置文件小解

发表时间:2012-02-20 06:58:09 文章分类:redis 阅读:15751
vim /etc/redis.conf1.redis 的配置文件单位比较有意思,对1k 和1kb 这样的单位做了明确的区分,不过感觉意义不是很大。# 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes而且,单位不区分大小写,1M = 1m2.daemonize no默认下,redis启动不以守护进程的方式启动,生产环境下建议将配置改为yes[span style="font-size:16px;color:#8B0000;"]3.pidfile /var/run/redis.pid,pid文件,没啥好说的4.port 6379,配置redis端口,默认6379。可以将port配置为0,此时不监听tcp协议,有些怪怪的。5.bind 127.0.0.1,绑定ip。默认绑定所有本机ip,一般用在服务器多ip下,可以只监听内网服务器ip,保证服务安全。6.unixsocket /tmp/redis.sock。sock文件7.timeou

linux redis 安装配置, 以及redis php扩展

发表时间:2012-02-20 06:54:06 文章分类:redis 阅读:1144
一,什么是redisredis是一个key-value存储系统。 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集 合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis 支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改 操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。二,安装配置redis1,下载redis
wget http://redis.googlecode.com/files/redis-2.2.8.tar.gz
2,安装redis
 tar zxvf redis-2.2.8.tar.gz      mv redis-2.2.8 /usr/local/redis      cd /usr/local/redis      make && make install  
安装完成后,会自动copy可执行文件到环境变量中,不要自己去copy了。 [mycode=Ruby

Linux下redis安装部署

发表时间:2012-02-20 06:42:48 文章分类:redis 阅读:8389
1、下载源代码
http://code.google.com/p/redis/downloads/list
下载redis-1.2.6.tar.gz 将下载包拷贝到/usr/local/webserver/redis-1.2.6/下2、安装
tar -zxvf redis-1.2.6.tar.gzce redis-1.2.6make
3、调整内存如果内存情况比较紧张的话,需要设定内核参数:
echo 1 > /proc/sys/vm/overcommit_memory
这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory该文件指定了内核针对内存分配的策略,其值可以是0、1、2。0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2,表示内核允许分配超过所有物理内存和交换空间总和的内存4、编辑redis.conf[mycode=Ruby]daemonize yes #转为守护进程,否则启动时会每隔5秒输出一行监控信息save 60 1000 #减

为什么使用 Redis及其产品定位

发表时间:2012-02-20 06:39:08 文章分类:redis 阅读:1898
传统MySQL+ Memcached架构遇到的问题实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: (1.)MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。 (2.)Memcached与MySQL数据库数据一致性问题。 (3.)Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。 (4.)跨机房cache同步问题。众多NoSQL百花齐放,如何选择最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题 (1.)少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。 (2.)海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。 (3.)这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路

Redis内存使用优化与存储

发表时间:2012-02-20 06:32:18 文章分类:redis 阅读:1029
Redis常用数据类型Redis最为常用的数据类型主要有以下五种: (1.)String (2.) Hash (3.) List (4.)Set (5.)Sorted set在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:"123" "456"这样的字符串。这里需要特殊说明一下vm字段,只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的,该功能会在后面具体描述。通过上图我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给Redis不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。下面我们先来逐一的分析

Redis复制与可扩展集群搭建

发表时间:2012-02-20 06:19:43 文章分类:redis 阅读:1081
Redis复制流程概述Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你的系统内存容量规划,原因可以参考我上一篇文章中提到的Redis磁盘IO问题。Redis复制流程在Slave和Master端各自是一套状态机流转,涉及的状态信息是:Slave 端:
REDIS_REPL_NONEREDIS_REPL_CONNECTREDIS_REPL_CONNECTED
Master端:
REDIS_REPL_WAIT_BGSAVE_STARTREDIS_REPL_WAIT_BGSAVE_ENDREDIS_REPL_SEND_BULKREDIS_REPL_ONLINE
整个状态机流程过程如下: (1.)Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT。 (2.)Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(最新版的Redis已经不需要让Slave阻塞)。 (3.) Master端收到sync命令简单判断是否有正在进行的内

Redis内存存储结构分析

发表时间:2012-02-20 06:11:00 文章分类:redis 阅读:22578
1 Redis 内存存储结构本文是基于 Redis-v2.2.4 版本进行分析.1.1 Redis 内存存储总体结构Redis 是支持多key-value数据库(表)的,并用 RedisDb 来表示一个key-value数据库(表). redisServer 中有一个 redisDb *db; 成员变量, RedisServer 在初始化时,会根据配置文件的 db 数量来创建一个 redisDb 数组. 客户端在连接后,通过 SELECT 指令来选择一个 reidsDb,如果不指定,则缺省是redisDb数组的第1个(即下标是 0 ) redisDb. 一个客户端在选择 redisDb 后,其后续操作都是在此 redisDb 上进行的. 下面会详细介绍一下 redisDb 的内存结构.redis 的内存存储结构示意图redisDb 的定义:[mycode=Java]typedef struct redisDb{dict *dict; /* The keyspace for this DB */dict *expires;