[转]Redis事务与Pipeline区别和执行效率

手册得知 pipeline 只是把多个redis指令一起发出去,redis并没有保证这些指定的执行是原子的;multi相当于一个redis的transaction的,保证整个操作的原子性,避免由于中途出错而导致最后产生的数据不一致。通过测试得知,pipeline方式执行效率要比其他方式高10倍左右的速度,启用multi写入要比没有开启慢一点。 继续阅读[转]Redis事务与Pipeline区别和执行效率

Redis配置文件详解

#是否作为守护进程进行
daemonize yes

#如以后台进程运行,则需要制定一个pid,默认为/var/run/redis.pid
pidfile redis.pid

#绑定主机IP,默认值127.0.0.1
#bind 127.0.0.1

#Redis 默认监听端口
port 6379

#客户端闲置多少秒后,断开链接,默认为300秒
timeout 300

#日志记录等级,有4个可选值debug,verbose(默认值),notice,warning
loglevel verbose

#制定日志输出的文件名,默认为stdout,也可以设为/dev/null屏蔽日志
logfile stdout

#可用数据库数,默认值为16,默认数据库为0
databases 16 继续阅读Redis配置文件详解

Redis学习笔记-Sets类型及操作

1、SADD key member

向名称为key的set中添加member。

2、SREM key member

删除名称为key的set中元素member。

3、SPOP key

随机返回并删除名称为key的set中一个元素。

4、SDIFF key [key …]

返回所有给定key与第一个key的差集。

5、SDIFFSTORE destination key [key …]

返回所有给定key与第一个key的差集,并另存到另一个key。 继续阅读Redis学习笔记-Sets类型及操作

Redis学习笔记-Lists类型及操作

1、LPUSH key value

在key对应list的头部添加字符串元素。

2、RPUSH key value

在key对应list的尾部添加字符串元素。

3、LINSERT key before|after piovt value

在key对应list的特定位置之前或者之后添加字符串元素

4、LSET key index value

设置list中指定下标的元素值(下标从0开始)。

5、LREM key count value

从key对应的list中删除count个和value相同的元素。

count > 0时,按从头到尾的顺序删除。

count < 0时,按从尾到头的顺序删除。

count = 0时,删除全部。

继续阅读Redis学习笔记-Lists类型及操作

Redis学习笔记-hashes类型及操作

1、HSET key field value

设置hash field为指定值,如果key不存在,则先创建。

2、HSETNX key field value

设置hash field为指定值,如果key不存在,则先创建。如果key已存在,设置失败返回0。

3、HMSET key field value field2 value

同时设置多个field。

4、HGET key field

获取指定的field值。

5、HMGET key field field2

获取多个指定的field值 继续阅读Redis学习笔记-hashes类型及操作

Redis学习笔记-Strings类型及操作

1、SET key value

设置key对应的值为string类型的value。

2、SETNX key value

设置key对应的值为string类型的value.如果key已经存在返回0.

3、SETEX key seconds value

设置key对应的值为string类型的value,并指定此键值对应的有效期。

4、SETRANGE key offset value

设置指定key的value值的子字符串。

5、MSET key value key2 value2

一次设置多个key的值,成功返回OK,表示所有值都被成功设置。失败返回0 表示没有任何值被设置。 继续阅读Redis学习笔记-Strings类型及操作

《Redis设计与实现》学习笔记-简单动态字符串

Redis没有直接使用传统的c字符串,而是自己构建了SDS(simple dynamic string)简单动态字符串。并将SDS作为Redis的默认字符串使用。

SDS与传统C字符串有以下区别

1、常数复杂度获取字符串长度

C字符串并不记录自身长度,所以要获取一个c字符串长度必须遍历整个字符串并进行计算。所以获取一个字符串长度复杂度为O(N)。

SDS的len属性记录自身长度,所以获取字符串长度的复杂度为O(1).

2、杜绝缓冲区溢出

C字符串不记录自身长度,在没有分配给足够内存时增加字符串长度很容易会造成缓存溢出。

当SDS API需要对SDS进行修改时,API会先检测SDS是否满足修改所需的要求,如果不满足SDS API会自动将SDS的空间扩展至所需大小。 继续阅读《Redis设计与实现》学习笔记-简单动态字符串