文档库 最新最全的文档下载
当前位置:文档库 › redis 超全的操作

redis 超全的操作

redis 超全的操作
redis 超全的操作

redis 超全的操作

exists('NonExistingKey');

incr

描述:

数字递增存储键值键.如果第二个参数被填满,它将被用来作为整数值递增

Increment the number stored at key by one. If the second argument is filled, it will be used as the integer value of the increment.

参数:key value:将被添加到键的值

返回值:INT the new value

范例:

$redis->incr('key1′);

$redis->incr('key1′);

$redis->incr('key1′);

$redis->incr('key1′);

decr

描述:

数字递减存储键值。如果第二个参数被填满,它将被用来作为整数值递减

Decrement the number stored at key by one. If the second argument is filled, it will be used as the integer value of the decrement.

参数:key value:将被添加到键的值

返回值:INT the new value

范例:

$redis->decr('key1′);

$redis->decr('key1′);

$redis->decr('key1′);

getMultiple

描述:

取得所有指定键的值。如果一个或多个键不存在,该数组中该键的值为假

参数:其中包含键值的列表数组

返回值:返回包含所有键的值的数组

范例:

$redis->set('key1′, 'value1′);

$redis->set('key2′, 'value2′);

$redis->set('key3′, 'value3′);

$redis->getMultiple(array('key1′, 'key2′, 'key3′));

rPush

描述:

由列表头部添加字符串值。如果不存在该键则创建该列表。如果该键存在,而且不是一个列表,返回FALSE。

参数:key,value

返回值:LONG The new length of the list in case of success, FALSE in case of Failure.

范例:

$redis->delete('key1′);

$redis->lPush('key1′, 'C'); // returns 1

$redis->lPush('key1′, 'B'); // returns 2

$redis->lPush('key1′, 'A'); // returns 3

lPop

描述:

返回和移除列表的最后一个元素

参数:key

返回值:STRING if command executed successfully BOOL FALSE in case of failure (empty list) 范例:

$redis->rPush('key1′, 'A');

$redis->rPush('key1′, 'B');

$redis->rPush('key1′, 'C');

$redis->lPop('key1′);

rPop

描述:

返回和移除列表的第一个元素

参数:key

返回值:STRING if command executed successfully BOOL FALSE in case of failure (empty list) 范例:

$redis->rPush('key1′, 'A');

$redis->rPush('key1′, 'B');

$redis->rPush('key1′, 'C');

$redis->rPop('key1′);

lSize

描述:

返回的列表的大小。如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回FALSE。

参数:Key

返回值:

LONG The size of the list identified by Key exists.

BOOL FALSE if the data type identified by Key is not list

范例:

$redis->rPush('key1′, 'A');

$redis->rPush('key1′, 'B');

$redis->rPush('key1′, 'C');

$redis->lSize('key1′);

$redis->rPop('key1′);

$redis->lSize('key1′);

lGet

描述:

返回指定键存储在列表中指定的元素。0第一个元素,1第二个…-1最后一个元素,-2的倒数第二…错误的索引或键不指向列表则返回FALSE。

参数:key index

返回值:

String the element at this index

Bool FALSE if the key identifies a non-string data type, or no value corresponds to this index in the list Key.

范例:

$redis->rPush('key1′, 'A');

$redis->rPush('key1′, 'B');

$redis->rPush('key1′, 'C');

$redis->lGet('key1′, 0);

$redis->lGet('key1′, -1);

$redis->lGet('key1′, 10);

lSet

描述:

为列表指定的索引赋新的值,若不存在该索引返回false.

参数:key index value

返回值:BOOL TRUE if the new value is setted. FALSE if the index is out of range, or data type identified by key is not a list.

范例:

$redis->rPush('key1′, 'A');

$redis->rPush('key1′, 'B');

$redis->rPush('key1′, 'C');

$redis->lGet('key1′, 0);

$redis->lSet('key1′, 0, 'X');

$redis->lGet('key1′, 0);

lGetRange

描述:

返回在该区域中的指定键列表中开始到结束存储的指定元素,lGetRange(key, start, end)。0第一个元素,1第二个元素…-1最后一个元素,-2的倒数第二…

参数:key start end

返回值:

Array containing the values in specified range.

范例:

$redis->rPush('key1′, 'A');

$redis->rPush('key1′, 'B');

$redis->rPush('key1′, 'C');

$redis->lGetRange('key1′, 0, -1);

lRemove

描述:

从列表中从头部开始移除count个匹配的值。如果count为零,所有匹配的元素都被删除。如果count是负数,内容从尾部开始删除。

参数:key count value

返回值:

LONG the number of elements to remove

BOOL FALSE if the value identified by key is not a list.

范例:

$redis->lPush('key1′, 'A');

$redis->lPush('key1′, 'B');

$redis->lPush('key1′, 'C');

$redis->lPush('key1′, 'A');

$redis->lPush('key1′, 'A');

$redis->lGetRange('key1′, 0, -1);

$redis->lRemove('key1′, 'A', 2);

$redis->lGetRange('key1′, 0, -1);

sAdd

描述:

为一个Key添加一个值。如果这个值已经在这个Key中,则返回FALSE。

参数:key value

返回值:

BOOL TRUE if value didn't exist and was added successfully, FALSE if the value is already present.

范例:

$redis->sAdd('key1′, 'set1′);

$redis->sAdd('key1′, 'set2′);

$redis->sAdd('key1′, 'set2′);

sRemove

描述:

删除Key中指定的value值

参数:key member

返回值:BOOL TRUE if the member was present in the set, FALSE if it didn't.

范例:

$redis->sAdd('key1′, 'set1′);

$redis->sAdd('key1′, 'set2′);

$redis->sAdd('key1′, 'set3′);

$redis->sRemove('key1′, 'set2′);

sMove

描述:

将Key1中的value移动到Key2中

参数:srcKey dstKey member

返回值:BOOL If the operation is successful, return TRUE. If the srcKey and/or dstKey didn't exist, and/or the member didn't exist in srcKey, FALSE is returned.

范例:

$redis->sAdd('key1′, 'set11′);

$redis->sAdd('key1′, 'set12′);

$redis->sAdd('key1′, 'set13′);

$redis->sAdd('key2′, 'set21′);

$redis->sAdd('key2′, 'set22′);

$redis->sMove('key1′, 'key2′, 'set13′);

sContains

描述:

检查集合中是否存在指定的值。

参数:key value

返回值:BOOL TRUE if value is a member of the set at key key, FALSE otherwise. 范例:

$redis->sAdd('key1′, 'set1′);

$redis->sAdd('key1′, 'set2′);

$redis->sAdd('key1′, 'set3′);

$redis->sContains('key1′, 'set1′);

$redis->sContains('key1′, 'setX');

sSize

描述:

返回集合中存储值的数量

参数:key

返回值:LONG the cardinality of the set identified by key, 0 if the set doesn't exist. 范例:

$redis->sAdd('key1′, 'set1′);

$redis->sAdd('key1′, 'set2′);

$redis->sAdd('key1′, 'set3′);

$redis->sSize('key1′);

$redis->sSize('keyX');

sPop

描述:

随机移除并返回key中的一个值

参数:key

返回值:String "popped" value Bool FALSE if set identified by key is empty or doesn't exist.

范例:

$redis->sAdd('key1′, 'set1′);

$redis->sAdd('key1′, 'set2′);

$redis->sAdd('key1′, 'set3′);

$redis->sPop('key1′);

$redis->sPop('key1′);

sInter

描述:

返回一个所有指定键的交集。如果只指定一个键,那么这个命令生成这个集合的成员。如果不存在某个键,则返回FALSE。

参数:key1, key2, keyN: keys identifying the different sets on which we will apply the intersection.

返回值:Array, contain the result of the intersection between those keys. If the intersection beteen the different sets is empty, the return value will be empty array.

范例:

$redis->sAdd('key1′, 'val1′);

$redis->sAdd('key1′, 'val2′);

$redis->sAdd('key1′, 'val3′);

$redis->sAdd('key1′, 'val4′);

$redis->sAdd('key2′, 'val3′);

$redis->sAdd('key2′, 'val4′);

$redis->sAdd('key3′, 'val3′);

$redis->sAdd('key3′, 'val4′);

var_dump($redis->sInter('key1′, 'key2′, 'key3′));

输出:

array(2) {[0]=>string(4) "val4″[1]=>string(4) "val3″}

sInterStore

描述:

执行sInter命令并把结果储存到新建的变量中。

参数:

Key: dstkey, the key to store the diff into.

Keys: key1, key2…keyN. key1..keyN are intersected as in sInter.

返回值:INTEGER: The cardinality of the resulting set, or FALSE in case of a missing key. 范例:

$redis->sAdd('key1′, 'val1′);

$redis->sAdd('key1′, 'val2′);

$redis->sAdd('key1′, 'val3′);

$redis->sAdd('key1′, 'val4′);

$redis->sAdd('key2′, 'val3′);

$redis->sAdd('key2′, 'val4′);

$redis->sAdd('key3′, 'val3′);

$redis->sAdd('key3′, 'val4′);

var_dump($redis->sInterStore('output', 'key1′, 'key2′, 'key3′));

var_dump($redis->sMembers('output'));

输出:

int(2)

array(2) {

[0]=>

string(4) "val4″

[1]=>

string(4) "val3″

}

sUnion

描述:

返回一个所有指定键的并集

参数:

Keys: key1, key2, …, keyN: Any number of keys corresponding to sets in redis. 返回值:

Array of strings: The union of all these sets.

范例:

$redis->delete('s0′, 's1′, 's2′);

$redis->sAdd('s0′, '1′);

$redis->sAdd('s0′, '2′);

$redis->sAdd('s1′, '3′);

$redis->sAdd('s1′, '1′);

$redis->sAdd('s2′, '3′);

$redis->sAdd('s2′, '4′);

var_dump($redis->sUnion('s0′, 's1′, 's2′)); 输出:

array(4) {

[0]=>

string(1) "3″

[1]=>

string(1) "4″

[2]=>

string(1) "1″

[3]=>

string(1) "2″

}

描述:

执行sUnion命令并把结果储存到新建的变量中。

参数:

Key: dstkey, the key to store the diff into.

Keys: key1, key2, …, keyN: Any number of keys corresponding to sets in redis. 返回值:

INTEGER: The cardinality of the resulting set, or FALSE in case of a missing key. 范例:

$redis->delete('s0′, 's1′, 's2′);

$redis->sAdd('s0′, '1′);

$redis->sAdd('s0′, '2′);

$redis->sAdd('s1′, '3′);

$redis->sAdd('s1′, '1′);

$redis->sAdd('s2′, '3′);

$redis->sAdd('s2′, '4′);

var_dump($redis->sUnionStore('dst', 's0′, 's1′, 's2′));

var_dump($redis->sMembers('dst'));

输出:

int(4)

array(4) {

[0]=>

[1]=>

string(1) "4″

[2]=>

string(1) "1″

[3]=>

string(1) "2″

}

sDiff

描述:

返回第一个集合中存在并在其他所有集合中不存在的结果

参数:Keys: key1, key2, …, keyN: Any number of keys corresponding to sets in redis. 返回值:Array of strings: The difference of the first set will all the others.

范例:

$redis->delete('s0′, 's1′, 's2′);

$redis->sAdd('s0′, '1′);

$redis->sAdd('s0′, '2′);

$redis->sAdd('s0′, '3′);

$redis->sAdd('s0′, '4′);

$redis->sAdd('s1′, '1′);

$redis->sAdd('s2′, '3′);

var_dump($redis->sDiff('s0′, 's1′, 's2′));

array(2) {

[0]=>

string(1) "4″

[1]=>

string(1) "2″

}

sDiffStore

描述:

执行sDiff命令并把结果储存到新建的变量中。

参数:

Key: dstkey, the key to store the diff into.

Keys: key1, key2, …, keyN: Any number of keys corresponding to sets in redis

返回值:INTEGER: The cardinality of the resulting set, or FALSE in case of a missing key. 范例:

$redis->delete('s0′, 's1′, 's2′);

$redis->sAdd('s0′, '1′);

$redis->sAdd('s0′, '2′);

$redis->sAdd('s0′, '3′);

$redis->sAdd('s0′, '4′);

$redis->sAdd('s1′, '1′);

$redis->sAdd('s2′, '3′);

var_dump($redis->sDiffStore('dst', 's0′, 's1′, 's2′));

var_dump($redis->sMembers('dst'));

Return value: the number of elements of s0 that are neither in s1 nor in s2. int(2)

array(2) {

[0]=>

string(1) "4″

[1]=>

string(1) "2″

}

sMembers, sGetMembers

描述:

返回集合的内容

参数:Key: key

返回值:An array of elements, the contents of the set.

范例:

$redis->delete('s');

$redis->sAdd('s', 'a');

$redis->sAdd('s', 'b');

$redis->sAdd('s', 'a');

$redis->sAdd('s', 'c');

var_dump($redis->sMembers('s'));

Output:

array(3) {

[0]=>

string(1) "c"

[1]=>

string(1) "a"

[2]=>

string(1) "b"

}

getSet

描述:

返回当前的Key的值,并修改Key为新的值。

参数:

Key: key

STRING: value

返回值:

A string, the previous value located at this key.

范例:

$redis->set('x', '42′);

$exValue = $redis->getSet('x', 'lol'); // return '42′, replaces x by 'lol' $newValue = $redis->get('x')' // return 'lol'

Redis根本是使用内存存储,持久化的关键是这三条指令:SA VE BGSA VE LASTSA VE …

当接收到SA VE指令的时候,Redis就会dump数据到一个文件里面。

值得一说的是它的独家功能:存储列表和集合,这是它与mc之流相比更有竞争力的地方。

不介绍mc里面已经有的东东,只列出特殊的:

TYPE key —用来获取某key的类型

KEYS pattern —匹配所有符合模式的key,太淫荡了,比如KEYS * 就列出所有的key了,当然,复杂度O(n)

RANDOMKEY - 返回随机的一个keyRENAME oldkey newkey —key也可以改名

列表操作,精华

RPUSH key string —将某个值加入到一个key列表头部

LPUSH key string —将某个值加入到一个key列表末尾

LLEN key —列表长度

LRANGE key start end —返回列表中某个范围的值,相当于mysql里面的分页查询那样

LTRIM key start end —只保留列表中某个范围的值

LINDEX key index —获取列表*****定索引号的值,要注意是O(n)复杂度

LSET key index value —设置列表中某个位置的值

LPOP key

RPOP key —和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列来使用了

集合操作

SADD key member —增加元素

SREM key member —删除元素

SCARD key —返回集合大小

SISMEMBER key member —判断某个值是否在集合中

SINTER key1 key2 ... keyN —获取多个集合的交集元素

SMEMBERS key —列出集合的所有元素

以下转自https://www.wendangku.net/doc/0b15574513.html,/thread-7136-1-1.html

操作hash类型的值:

Command Parameters Description

HSET key field value Set the hash field to the specified value. Creates the hash if needed.

HGET key field Retrieve the value of the specified hash field.

HMGET key field1 ... fieldN Get the hash values associated to the specified fields.

HMSET key field1 value1 ... fieldN valueN Set the hash fields to their respective values.

HINCRBY key field integer Increment the integer value of the hash at key on field with integer.

HEXISTS key field Test for existence of a specified field in a hash

HDEL key field Remove the specified field from a hash

HLEN key Return the number of items in a hash.

HKEYS key Return all the fields in a hash.

HV ALS key Return all the values in a

redis3.0.2 分布式集群安装详细步骤

redis3.0.2 分布式集群安装详细步骤 --(centos5.8 X64系统) 版本历史 一: redis cluster介绍篇 1:redis cluster的现状 目前redis支持的cluster特性(已亲测): 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):进群管理:cluster xxx 5):基于配置(nodes-port.conf)的集群管理 6):ASK 转向/MOVED 转向机制. 2:redis cluster 架构 1)redis-cluster架构图

架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value 2) redis-cluster选举:容错

(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master 节点通信超过(cluster-node-timeout),认为当前master节点挂掉. (2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的 操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态. b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态. 二.Redis集群安装篇(centos5.8 X64系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)

Redis面试专题及答案

redis和memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高? 区别: 1.mc可缓存图片和视频。rd支持除k/v更多的数据结构; 2.rd可以使用虚拟内存,rd可持久化和aof灾难恢复,rd通过主从支持数据备份; 3.rd可以做消息队列。 原因:mc多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。 redis主从复制如何实现的?redis的集群模式如何实现?redis的key是如何寻址的? 主从复制实现:主节点将自己内存中的数据做一份快照,将快照发给从节点,从节点将数据恢复到内存中。之后再每次增加新数据的时候,主节点以类似于mysql的二进制日志方式将语句发送给从节点,从节点拿到主节点发送过来的语句进行重放。 分片方式: -客户端分片 -基于代理的分片 ●Twemproxy ●codis -路由查询分片 ●Redis-cluster(本身提供了自动将数据分散到Redis Cluster不同节点的能力,整个数据集合的某个数据子集存储在哪个节点对于用户来说是透明的) redis-cluster分片原理:Cluster中有一个16384长度的槽(虚拟槽),编号分别为0-16383。每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,可以由用户指定,也可以在初始化的时候自动生成,只有Master才拥有槽的所有权。Master节点维护着一个16384/8字节的位序列,Master节点用bit来标识对于某个槽自己是否拥有。比如对于编号为1的槽,Master只要判断序列的第二位(索引从0开始)是不是为1即可。这种结构很容易添加或者删除节点。比如如果我想新添加个节点D, 我需要从节点A、B、C中得部分槽到D上。 使用redis如何设计分布式锁?说一下实现思路?使用zk可以吗?如何实现?这两种有什么区别? redis: 1.线程A setnx(上锁的对象,超时时的时间戳t1),如果返回true,获得锁。 2.线程B 用get获取t1,与当前时间戳比较,判断是是否超时,没超时false,若超时执行第3步; 3.计算新的超时时间t2,使用getset命令返回t3(该值可能其他线程已经修改过),如果 t1==t3,获得锁,如果t1!=t3说明锁被其他线程获取了。 4.获取锁后,处理完业务逻辑,再去判断锁是否超时,如果没超时删除锁,如果已超时,不用处理(防止删除其他线程的锁)。 zk: 1.客户端对某个方法加锁时,在zk上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点node1; 2.客户端获取该路径下所有已经创建的子节点,如果发现自己创建的node1的序号是最小的,就认为这个客户端获得了锁。 3.如果发现node1不是最小的,则监听比自己创建节点序号小的最大的节点,进入等待。

Redis高可用VIP漂移方法、终端及存储介质与制作流程

本技术公开了一种Redis高可用VIP漂移方法、终端及存储介质,属于云数据库,要解决的技术问题为如何在确保Redis节点密钥的安全性、且主从节点身份切换时不会导致服务状态混乱的前提下,实现VIP漂移的问题。方法包括:通过哨兵监测每个Redis节点的运行状态;通过节点监控器监测对应Redis节点的身份;通过哨兵切换两个Redis节点的主从身份,通过部署于原主节点中的节点监控器将原节点与VIP解绑,通过部署于切换后主节点中的节点监控器将切换后主节点与VIP绑定。终端中处理器被配置用于调用程序指令执行上述方法。存储介质存储有计算机程序,计算机程序中程序指令当被处理器执行时处理器执行上述方法。 权利要求书 1.一种Redis高可用VIP漂移方法,其特征在于用于实现两个Redis节点之间主从身份的切换以及VIP漂移,所述两个Redis节点中一个节点的身份为主节点并绑定VIP,另一个节点的身份为从节点不绑定VIP,主节点和从节点数据同步,所述方法包括: 通过哨兵监测每个Redis节点的运行状态;

每个Redis节点均部署有节点监控器,通过节点监控器监测对应Redis节点的身份; 当哨兵监测到节点异常时,通过哨兵切换两个Redis节点的主从身份,每个节点监控器监测到对应的Redis节点的身份变化后,通过部署于原主节点中的节点监控器将原节点与VIP解绑,通过部署于切换后主节点中的节点监控器将切换后主节点与VIP绑定。 2.根据权利要求1所述的一种Redis高可用VIP漂移方法,其特征在于当哨兵监测到节点异常时,通过哨兵切换两个Redis节点的主从身份,并将切换后每个Redis节点的身份存储于哨兵。 3.根据权利要求2所述的一种Redis高可用VIP漂移方法,其特征在于每个Redis节点本地保存其身份,包括更新并保存切换后的身份。 4.根据权利要求3所述的一种Redis高可用VIP漂移方法,其特征在于所述节点监控器的工作包括: 监测对应Redis节点的身份; 如果所述Redis节点当前身份为主节点,判断所述Redis节点是否已绑定VIP,如果所述Redis 节点已绑定VIP,则监测对应Redis节点的身份,如果所述Redis节点未绑定VIP,则将所述Redis节点绑定VIP; 如果所述Redis节点当前身份为从节点,判断所述Redis节点是否已解绑VIP,如果所述Redis 节点已解绑VIP,则继续监测对应Redis节点的身份,如果所述Redis节点未解绑VIP,则将所述Redis节点解绑VIP。 5.根据权利要求4所述的一种Redis高可用VIP漂移方法,其特征在于节点监控器监测对应Redis节点的身份,包括如下步骤: 获取本地保存的身份;

redis主备部署方案

redis主备部署方案 Redis部署方式采用主备的方式,通过keepalived来对外提供虚IP,并实现主备自动切换功能。 主实例A:192.168.20.30 备实例B:192.168.20.232 虚IP:192.168.20.110 正常工作时,虚IP在主实例A上,主实例A上的数据自动同步到备实例B上,当主实例A挂掉之后,备实例B将自动接管虚IP,并将redis转换为主模式,待原主实例A恢复后,A将自动切换成备模式,从B上同步数据,主备角色互换,实现融灾备份。 安装部署步骤如下: 1.安装keepalived wget https://www.wendangku.net/doc/0b15574513.html,/software/keepalived-1.2.6.tar.gz tarzxvf keepalived-1.2.6.tar.gz cd keepalived-1.2.6 ./configure 如果报错 configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. 解决办法: yum -y install openssl-devel yum -y install popt-devel ln -s /usr/src/kernels/2.6.32-220.el6.x86_64/ /usr/src/linux ./configure make make install cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/sbin/keepalived /usr/sbin/ mkdir /etc/keepalived 添加keepalived的配置项: vi /etc/keepalived/keepalived.conf global_defs { router_id LVS_DEVEL } vrrp_scriptMonitor_Redis { script "/home/bbcv/redis/redis_keepalive.sh"

memcached&redis性能测试

一、Memcached 1.1、memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。 Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。 1.2、Memcached是如何工作的 Memcached的神奇来自两阶段哈希(two-stage hash)。Memcached就像一个巨大的、存储了很多对的哈希表。通过key,可以存储或查询任意的数据。客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)。举个列子,假设有3个客户端1, 2, 3,3台memcached A, B, C:Client 1想把数 据”tuletech”以key “foo”存储。Client 1首先参考节点列表(A, B, C),计算key “foo”的哈希值,假设memcached B被选中。接着,Client 1直接connect 到memcached B,通过key “foo”把数据”tuletech”存储进去。Client 2使用与Client 1相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的

Redis面试题及复习资料

Redis 是一个基于内存的高性能key-value数据库。(有空再补充,有理解错误或不足欢迎指正) Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set可以做高性能的tag 系统等等。 另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。 Redis支持的数据类型 Redis通过Key-Value的单值不同类型来区分, 以下是支持的类型: Strings Lists Sets 求交集、并集 Sorted Set hashes

为什么redis需要把所有数据放到内存中? Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。 如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。 如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。 Redis是单进程单线程的 redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 虚拟内存 当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大. 当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value. vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的. 可能会造成比较长时间的延迟,但是对数据完整性有很好的保证. 自己测试的时候发现用虚拟内存性能也不错。如果数据量很大,可以考虑分布式或者其他数据库 分布式 redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。 这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave 提供检索服务。这样可以有效减少单个机器的并发访问数量。

memcache、redis、tair性能对比测试报告材料

memcache、redis、tair性能对比测试报告 第1章限制条件 前一周所做的分布缓存技术预言中有包括ehcache、memcache、redis、tair,还包括了基于MongoDB的分布式技术。测试中,考虑到各自功能的差异化特点,其中选择了memcache、redis、tair功能特性相近的缓存服务器进行性能对比,所以ehcache、MongoDB将不做为本次测试的规范,其原因如下: 1)Ehcache是组件级别的缓存,要搭建一个独立的缓存服务器,需要用到ehcache server 模块,这是个war包,能运行在web 容器中,决定整个缓存服务器性能的好坏因素太多,比如web服务器,集群方式等。跟memcache、redis、tair没有对比性。 2)MongoDB是面向文档的数据库,跟缓存没有可比性。 第2章测试场景概述 性能测试包括单机环境和分布式环境,主要针对memcache、redis、tair各缓存服务器在缓存了不同级别的数据下,多个线程并发操作向缓存set/get缓存数据,考虑到网络方面的负载,又将每次set/get操作的缓存数据的大小分为三个不同的级别:1KB,10KB,100KB,通过对上述的条件进行排列,取得以下的测试场景。 第3章单机环境测试 3.1.测试场景: 1.当各缓存的数据库空时,以单线程通过各缓存客户端set调用向服务端推送数据,比较 10000操作所消耗的时间,以上动作通过使用不同大小的单个缓存对象重复三次。2.在场景一完成的情况下,以单线程通过各缓存客户端get调用向服务端获取数据,比较 10000操作所消耗的时间,以上动作通过使用不同大小的单个缓存对象重复三次。3.并发200个线程通过缓存软件的客户set调用向服务端推送数据,每个线程完成10000 次的操作,比较服务器的tps大小,以上动作通过使用不同大小的单个缓存对象重复三

Redis内存使用优化与存储

Redis内存使用优化与存储 Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: ?String ?Hash ?List ?Set ?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不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。 下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式: ?String 常用命令:

set,get,decr,incr,mget 等。 应用场景: String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。 实现方式: String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。 Hash 常用命令: hget,hset,hgetall 等。 应用场景: 我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息: 用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式: 第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

系统部署方案与优化

系统部署方案与优化 方案背景: 目前部署在阿里云上的系统存在内存不够用,不定期的应用假死 问题。为了解决这些问题并能够很好的对系统的扩展性和可用性进行配置。系统需要进行部署改造。为此提出改造方案。 目前的通讯过程主要有2中构成,分别如下表: 详细的通讯过程如下图: ActiveMQ 消息 服务器数据库 Tomcat 应用服务器支付客户端1 支付客户端N 支付宝 财付通 支付网关7、消息发送 1、发送请求 4、返回结果 2、处理后发送 3、处理后返回6、发送回调消息 5、异步回调 图:通讯过程 其中通讯虚线标识是一次连接,但该连接为用完即关闭,特点为连接 序号 通讯路径 备注 1 ○1 ○2 ○3 ○4 生成订单、主动查询、退款、取消订单 2 ○5 ○6 ○7 付款通知

时间比较短。图中实线标识该为一个连接,但该连接具有连接时间长的特点,一般是系统起来后进行连接,系统主要注销后关闭。其中步骤6采用的连接池技术。从图中可以看出目前主要的瓶颈分别内存、硬盘速度和大小、带宽(目前较好)。 分别讨论如下: 目前的内存的主要消耗对象为: 内存消耗对象分析 序号系统主要对象建议内存 1 Tomcat应用服 务器目前没有使用缓存技术,主要是线程占 用数和连接数占用相关的内存 4G 2 ActiveX消息服 务器主要是连接数和消息的存储(自带数据 库存储引擎) 4G 3 Mysql 查询缓存4G 4 操作系统进程管理、调度10% 4 预留应急和升级20% 结论:建议采用16G内存。因虚拟机内存可以调整,在开始阶段可以采用8G的内存(节省开支),支撑的数量高了调整为16G. 关于CPU,建议4核心CPU及以上。主要用来给Mysql、java使用。数据量来后,可以将mysql单独部署到独立的虚机上。 如果部署mysql,建议硬盘100G。不部署mysql50G即可。 本部署方案为迁移的方案,为计算优化需要的各个参数。

网络攻击常用命令综述

网络攻击常用命令综述 工欲善其事,必先利其器”——当然不是让你再满世界去找新的黑客软件啦(其实我不反对使用这些软件,相反我很喜欢用它们,但是必须是在知其所以然的情况下使用,才有可能对自身的电脑水平有所帮助),要进行入侵工作的话,至少(我认为)得装上NT操作系统,以它作为入侵平台,因为NT本身对网络的支持可以说比WIN9X来得更强大得多……当然,如果想对UNIX系统动点小手术(网络中的UNIX可始终还是主流呀)而又没钱装UNIX的话,LINUX也极佳 的选择(特别是现在国内至少有七八种中文LINUX版本——想当年要给REDHAT 配上中文支持是何等麻烦……),至少你可以借此了解UNIX系统的基本操作以及文件存放位置、系统配置、编译器、各种动作之后的记录等等…… 然后还得再学点编程语言,至少C与UNIX下的SHELL编程得会一点,能看懂人家写的利用各种漏洞的程序,能对它进行修改,偶尔还能写几个小程序放到网上让大伙儿乐乐,这样玩起来才可能有成就感(其实我自己还不太行,但这多少是个目标) 好了,废话少说,先讲讲一些MS系统里自带的相关网络程序的使用吧。 在MS的操作系统中,与网络安全较有关系的几个命令/程序 是:ping\winipcfg\tracert\net\at\netstat,且待我慢慢道来: 1. ping:这是TCP/IP协议中最有用的命令之一 它给另一个系统发送一系列的数据包,该系统本身又发回一个响应,这条实用程序对查找远程主机很有用,它返回的结果表示是否能到达主机,宿主机发送一个返回数据包需要多长时间。 Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] destination-list Options: -t Ping the specifed host until interrupted.(除非人为中止,否则一直ping下去) -a Resolve addresses to hostnames.(把IP转为主机名) -n count Number of echo requests to send.(响应请求的数量) -l size Send buffer size.(封包的大小)

Redis备份容灾及高可用方案

Redis 备份、容灾及高可用方案

一,Redis简单介绍 Redis是一个高性能的key-value非关系型数据库,由于其具有高性能的特性,支持高可用、持久化、多种数据结构、集群等,使其脱颖而出,成为常用的非关系型数据库。 此外,Redis的使用场景也比较多。 我们常通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比较适合适用。 4.排名 Redis在内存中对数字进行递增或递减的操作实现得非常好。所以我们在很多排名的场景中会应用Redis来进行,比如小说网站对小说进行排名,根据排名,将排名靠前的小说推荐给用户。

5.发布/订阅 Redis提供发布和订阅功能,发布和订阅的场景很多,比如我们可以基于发布和订阅的脚本触发器,实现用Redis的发布和订阅功能建立起来的聊天系统。 此外还有很多其它场景,Redis都表现的不错。 二,Redis使用中单点故障问题 正是由于Redis具备多种优良特新,且应用场景非常丰富,以至于Redis在各个公司都有它存在的身影。那么随之而来的问题和风险也就来了。Redis虽然应用场景丰富,但部分公司在实践Redis应用的时候还是相对保守使用单节点部署,那为日后的维护带来了安全风险。 在2015年的时候,曾处理过一个因为单点故障原因导致的业务中断问题。当时的Redis都未采用分布式部署,采用单实例部署,并未考虑容灾方面的问题。 当时我们通过Redis服务器做用户购买优惠商品的行为控制,但后来由于未知原因Redis节点的服务器宕机了,导致我们无法对用户购买行为进行控制,造成了用户能够在一段时间内多次购买优惠商品的行为。 这种宕机事故可以说已经对公司造成了不可挽回的损失了,安全风险问题非常严重,作为当时运维这个系统的我来说有必要对这个问题进行修复和在架构上的改进。于是我开始了解决非分布式应用下Redis单点故障方面的研究学习。

Redis常用命令汇总

Redis常用命令汇总 Redis::__construct 描述: 创建一个Redis客户端 范例: $redis = new Redis(); connect, open 描述: 实例连接到一个Redis. 参数:host: string port: int 返回值:BOOL 成功返回:TRUE;失败返回:FALSE 范例: $redis->connect(‘127.0.0.1′, 6379); get 描述: 获取有关指定键的值 参数:key 返回值:string或BOLL 如果键不存在,则返回 FALSE。否则,与此相关的关键值返回。 范例: $redis->get(‘key’); set 描述: 设置关键值参数 参数:Key Value 返回值:BOOL 范例: $redis->set(‘key’, ‘value’) setnx

描述: 如果在数据库中不存在该键,设置关键值参数 参数:key value 返回值:BOOL 范例: $this->redis->setnx(‘key’, ‘value’); $this->redis->setnx(‘key’, ‘value’); delete 描述: 删除指定的键 参数:一个键,或不确定数目的参数,每一个关键的数组:key1 key2 key3 … keyN 返回值:删除的项数 范例: $redis->set(‘key1′, ‘val1′); $redis->set(‘key2′, ‘val2′); $redis->set(‘key3′, ‘val3′); $redis->set(‘key4′, ‘val4′); $redis->delete(‘key1′, ‘key2′); $redis->delete(array(‘key3′, ‘key4′)); exists 描述: 验证指定的键是否存在 参数key 返回值:Bool 范例: $this->set(‘key’, ‘value’); $this->exists(‘key’); $this->exists(‘NonExistingKey’); incr 描述:

tair与redis分析

1. Tair总述 1.1 系统架构 一个Tair集群主要包括3个必选模块:configserver、dataserver和client,一个可选模块:invalidserver。通常情况下,一个集群中包含2台configserver及多台dataServer。两台configserver互为主备并通过维护和dataserver之间的心跳获知集群中存活可用的dataserver,构建数据在集群中的分布信息(对照表)。dataserver负责数据的存储,并按照configserver的指示完成数据的复制和迁移工作。client在启动的时候,从configserver获取数据分布信息,根据数据分布信息和相应的dataserver交互完成用户的请求。invalidserver主要负责对等集群的删除和隐藏操作,保证对等集群的数据一致。 从架构上看,configserver的角色类似于传统应用系统的中心节点,整个集群服务依赖于configserver的正常工作。但实际上相对来说,tair的configserver是非常轻量级的,当正在工作的服务器宕机的时候另外一台会在秒级别时间内自动接管。而且,如果出现两台服务器同时宕机的最恶劣情况,只要应用服务器没有新的变化, tair依然服务正常。而有了configserver这个中心节点,带来的好处就是应用在使用的时候只需要配置configserver的地址(现在可以直接配置Diamond key),而不需要知道内部节点的情况。 1.1.1 ConfigServer的功能 1) 通过维护和dataserver心跳来获知集群中存活节点的信息 2) 根据存活节点的信息来构建数据在集群中的分布表。 3) 提供数据分布表的查询服务。 4) 调度dataserver之间的数据迁移、复制。 1.1.2 DataServer的功能

redis2.8生产环境下真实配置过程

#### YUM安装源请自行查找,需要注意,两台主备服务机器配置大体相同,但是个别参数不一样,切记!!! ###安装编译库 yum install cpp binutils glibc glibc-common glibc-devel gcc make tcl-devel.x86_64 ###编译安装REDIS wget http://download.redis.io/releases/redis-2.8.23.tar.gz cd /soft tar zxvf redis-2.8.23.tar.gz mv redis-2.8.23 /usr/local/src cd /usr/local/src/redis-2.8.23 ##修改MAKE文件,修改对应的安装目录PREFIX?=/usr/local/redis vi /usr/local/src/redis-2.8.23/src/Makefile make make install ###配置REDIS mkdir -p /usr/local/redis/{bin,conf,logs,data} ##配置REDIS系统环境变量 vi /etc/profile.d/redis.sh ## redis PATH export PATH=/usr/local/redis/bin:$PATH source /etc/profile.d/redis.sh ##配置系统参数 vi /etc/sysctl.conf net.core.somaxconn = 1024 vm.overcommit_memory = 1 sysctl -p ##编辑REDIS参数及停止启动脚本 vi /usr/local/redis/redis-start.sh vi /usr/local/redis/redis-stop.sh vi /usr/local/redis/conf/redis.conf cd /usr/local/redis chmod 700 redis_check.sh redis-start.sh redis-stop.sh

集群情况下Session共享解决方案 redis

集群情况下Session共享解决方案redis 1、集群情况下session会产生什么原因? 由于session存放在服务器端,集群下用户可能访问不同的服务器,则可能session无法共享。 2、Session共享解决方案 1)NGINX做的负载均衡可以绑定ip_hash,从而使同一个IP访问同一个服务器------------------该方案使得集群失去意义。 2)利用数据库同步session----------------------太过复杂 3)利用cookie同步session(保存一个session到本地,再次访问将其带到服务器端)----------------------安全性差、http请求都需要带参数增加了带宽消耗 4)使用session集群,存放到redis中(spring-session) 3、spring-session项目,解决session共享问题 org.springframework.boot spring-boot-starter-redis org.springframework.session spring-session-data-redis 创建SessionConfig

import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; //这个类用配置redis服务器的连接 //maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒) @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) Public class SessionConfig { //冒号后的值为没有配置文件时,制动装载的默认值 @Value("${redis.hostname:localhost}") String HostName; @Value("${redis.port:6379}") int Port; @Bean Public JedisConnectionFactory connectionFactory() { JedisConnectionFactory connection = new JedisConnectionFactory(); connection.setPort(Port); connection.setHostName(HostName); return connection; } } 初始化Session: //初始化Session配置

redis配置文件详解

redis 是一款开源的、高性能的键-值存储(key-value store),和 memcached 类似,redis 常被称作 是一款 key-value 内存存储系统或者内存数据库,同时由于它支持丰富的数据结构,又被称为一种数据结 构服务器(data structure server)。 编译完 redis,它的配置文件在源码目录下 redis.conf ,将其拷贝到工作目录下即可使用,下面具体解释redis.conf 中的各个参数: 1 daemonize no 默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes。 2 pidfile /var/run/redis.pid 当 Redis 在后台运行的时候,Redis 默认会把 pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个 redis 服务时,需要指定不同的 pid 文件和端口 3 port 监听端口,默认为 6379 4 #bind 127.0.0.1 指定 Redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中为了安全最好设置该项。默认注释掉,不开启 5 timeout 0 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接

6 tcp-keepalive 0 指定 TCP 连接是否为长连接,"侦探"信号有 server 端维护。默认为 0.表示禁用 7 loglevel notice log 等级分为 4 级,debug,verbose, notice, 和 warning。生产环境下一般开启 notice 8 logfile stdout 配置 log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上,修改为日志文件目录 9 databases 16 设置数据库的个数,可以使用 SELECT 命令来切换数据库。默认使用的数据库是 0 号库。 默认 16 个库 10 save 900 1 save 300 10 save 60 10000 保存数据快照的频率,即将数据持久化到 dump.rdb 文件中的频度。用来描述"在多少秒期 间至少多少个变更操作"触发 snapshot 数据保存动作

keepalived+redis主备

keepalived+redis主备容灾部署 XXX 2016/8/8

目录 1 方案图 (3) 2 安装redis (3) 2.1 redis master安装 (3) 2.2 redis slave安装 (4) 3 安装keepalived (5) 4 配置keepalived (8) 4.1 redis-master 配置 (8) 4.2 redis-slave 配置 (11)

1 方案图 Redis-master 192.168.11.149 Redis-slave 192.168.11.150 图1方案部署图 现网环境中有两个数据库主机,master,和slave。以及一个vip Master:192.168.11.149 Slave:192.168.11.150 Vip:192.168.200.200 节点A Redis-Master主节点,节点B Redis-Slave 备用节点,虚拟IP是对外提供访问的IP。虚拟IP在某个时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不可用时,备用节点接管虚拟IP,提供正常服务。 2安装redis 2.1redis master安装 下载redis-3.0.3.tar.gz 创建redis账户 #useradd -d /home/cin_redis –s /bin/bash –m cin_redis # passwd cin_redis 上传redis-3.0.3.tar.gz

解压 # tar –xzvf redis-3.0.3.tar.gz #cd rediis-3.0.3/src #mak MALLOC=libc #make PREFIX=$HOME install 在redis的解压目录下有一个redis.conf 文件,编辑redis.conf文件 daemonize yes后台模式运行 port 15093 端口 logfile “/home/cin_redis/redis-15093.log” pidfile “/home/cin_redis/redis-15093.pid” 可以把该配置文件拷贝到bin目录下修改;启动redis # redis-server redis.conf 2.2redis slave安装 redis slave机器上同样安装redis数据库,安装步骤同2.1安装,修改redis.conf 文件 daemonize yes后台模式运行 port 15093 端口 logfile “/home/cin_redis/redis-15093.log” pidfile “/home/cin_redis/redis-15093.pid” slaveof 192.168.11.149 15093建立与192.168.11.149的主从关系 可以把该配置文件拷贝到bin目录下修改;启动redis #redis-server redis.conf 用redis-cli客户端连接redis-master数据库,查看replication 图2-1redis-master主从关系信息图 用redis-cli客户端连接redis-slave数据库,查看replication

redis-jedis笔记整理

启动Redis服务器 启动客户端 Redis命令目录key(建) 保存键值对set key value 查询指定键对象get key 删除给定键的对象del key1key2…

设置键过期时间EXPIRE key exptime 剩余时间ttl key 查看搜索有键值keys键 migrate指令(移动将数据移动另外一个数据) 将key原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功,key保证会出现在目标实例上,而当前实例上的key会被删除。 MOVE key db 将数据库的key移动到指定的数据库db当中。如果当前数据库(源数据库)和给定数据库(目标数据库)有相同的名字的给定key,或者key不存在于当前数据库,那么MOVE没有任何效果。因此,也可以利用这一特性,将MOVE当作锁(locking)原语(primitive)。

Obejct{refcount|encoding|idletime} 通常用在debug或者了解为了节省空间使用特殊的编码情况,当redis用作缓存时候,也可以通过OBJECT命令中的信息,决定key的驱逐策略. object refcount key:返回给定key引用所存储的值的次数. object encoding key:返回给定key所存储的值编码可以有 raw(一般字符串)或int(用字符串表示64位数字是为了节约空间)。 ziplist或linkedlist。ziplist是为节约大小较小的列表空间而作的特殊表示。 intset或者hashtable。intset是只储存数字的小集合的特殊表示。 zipmap或者hashtable。zipmap是小哈希表的特殊表示。 ziplist或者skiplist格式。ziplist用于表示小的有序集合,而skiplist则用于表 示任何大小的有序集合。 object idletime key:返回给定key自存储的空闲时间 persist key 将key从带生存时间转换为持久的不带生存时间.

相关文档
相关文档 最新文档