1 介绍

Redis是一个非关系型数据库,常用于缓存数据和分布式加锁。 优先请参考文档:http://redisdoc.com/index.html

2 五大数据结构

2.1 String结构

2.1.1 单值缓存

SET key valueGET key

2.1.2 对象缓存

最后面两种的好处是单个列的缓存更新的时候更加方便 不用同步整个用户的数据。

SET user:1 value(json数据)

MSET user:1:name benzhu user:1:sex 男

MGET user:1:name user:1:sex

2.1.2 分布式锁

将key的值设置为value,当且仅当key不存在,结果成功返回1,失败返回0:

SETNX key value

执行完业务释放锁,也就是删除key:

DEL key

将key值设置为value,并将设置key的生存周期,防止程序意外的终止导致死锁:

setex key seconds value

2.1.3 计数器

自动为value加1

INCR key

2.1.4 分布式系统全局序列号

为键 key 储存的数字值加上增量 increment,一般用于批量的划分序列号给程序,防止数据库自增ID冲突:

INCRBY key increment

2.2 hash哈希

2.2.1 单值存储

存储一个哈希表key的键值:

HSET key fieId value

获取哈希表key对应的fieId键值:

HGET key fieId

删除fieId:

HDEL key fieId

增加数量number:

HINCRBY key fieId number

获取key中number总数:

HLEN key

获取key中所有fieId:

HGETALL key

2.2.2 对象存储

就是存储多个键值对:

HMSET user name value sex value

取出多个键值对:

HMGET user name sex

2.2.3 优点:

整合存储,方便管理 相比String消耗内存与CPU更小 相比String更省空间

2.2.4 缺点:

过期功能不能使用在fieId,只能用于key,Redis集群架构下不适合大规模使用。

2.3 List列表

2.3.1 常用操作

将一个或者多个值插入key列表的左边(表头):

LPUSH key value[value...]

将一个或者多个值插入key列表的右边(表尾):

RPUSH key value[calue...]

读取key列表左边(表头)的值并移除:

LPOP key

读取key列表右边(表尾) 的值并移除:

RPOP key

返回key中指定start-stop区间的元素:

LRANGE key start stop

从key表头弹出一个元素,阻塞等待timeout:

BLPOP key timeout

从key表尾弹出一个元素,阻塞等待timeout:

BRPOP key timeout

2.3.2 数据结构实现

Stack(栈):LPUSH + LPOP

Queue(队列):LPUSH + RPOP

Blocking MQ(阻塞队列):LPUSH + BRPOP

2.4 Set集合

2.4.1 常用操作

往集合key中存入元素,存在则忽略:

SADD key value

从集合key中删除元素:

SREM key value

获取集合key中所有元素:

SMEMBERS key

获取集合中元素个数:

SCARD key

判断value元素是否存在于集合key中:

SISMEMBER key value

从集合中随机选出count个元素,元素不删除:

SRANDMEMBER key [count]

从集合中选出count个元素,元素从key中删除:

SPOP key [count]

2.4.2 运算操作

交集运算:

SINTER key [key...]

交集结果放入新集合destination:

SINTERSTORE destination key [key...]

并集运算:

SUNION key [key...]

并集结果放入新集合destination:

SUNIONSTORE destination key [key...]

差集运算:

SDIFF key [key...]

差集结果放入新集合destination:

SDIFFSTORE destination key [key...]

2.5 zset(有序集合)

也称Sorted-Set

2.5.1 常用操作:

往有序集合key中加入带分值元素:

ZADD key score member

从有序集合中删除元素:

ZREM key member

返回有序集合中member的分值:

ZSCORE key member

为有序集合member的分值加上increment:

ZINCRBY key increment member

返回有序集合key中元素个数:

ZCARD key

正序获取start到stop下标的元素:

ZRANGE key start stop

查看全部 o - -1;withscores 显式分值;

倒序获取start到stop下标元素:

ZREVRANGE key start stop

2.5.2 集合操作

并集运算:

ZUNIONSTORE destkey numkeys key

交集运算:

ZINTERSTORE destkey numkeys key

2.6 通用操作

  1. 查看所有key: keys *

  2. 筛选benzhu开头的key: keys benzhu?

  3. 判断key是否存在,存在返回1,不存在返回0: exists key

  4. key重命名: rename oldkey newkey

  1. 设置number过期时间,单位为秒: expire key number

  2. key超时所剩时间: ttl key

  3. key的类型返回: type key

  4. 更换数据库 redis中有16个数据库可以选择,默认为0; select 0-15

  5. 移动key到别的数据库: move key 0-15

2.7 事务

  1. 开启事务: multi

  2. 提交事务: exev

  3. 回滚: discard

2.8 持久化

2.8.1 RDB持久化

默认开启,将某个时间点的所有数据都存放在硬盘上。数据量随着时间而增大,故障会丢失最后一次快照之后的数据。 生成单独的文件,方便进行恢复,性能最大化。

2.8.2 AOF持久化

将写命令添加到AOF文件的末尾,需要使用设置同步选项:

选项

介绍

always

每个写命令都同步,最安全但是会降低服务器性能,效率低。

everysec

每秒同步一次,崩溃后丢失一秒左右的数据。

no

让操作系统决定何时同步,提升不大。

随着写请求的增多,AOF会越来越大。redis提供AOF重写的特性,去除AOF文件的冗余写命令。