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 通用操作
查看所有key:
keys *
筛选benzhu开头的key:
keys benzhu?
判断key是否存在,存在返回1,不存在返回0:
exists key
key重命名:
rename oldkey newkey
设置number过期时间,单位为秒:
expire key number
key超时所剩时间:
ttl key
key的类型返回:
type key
更换数据库 redis中有16个数据库可以选择,默认为0;
select 0-15
移动key到别的数据库:
move key 0-15
2.7 事务
开启事务:
multi
提交事务:
exev
回滚:
discard
2.8 持久化
2.8.1 RDB持久化
默认开启,将某个时间点的所有数据都存放在硬盘上。数据量随着时间而增大,故障会丢失最后一次快照之后的数据。 生成单独的文件,方便进行恢复,性能最大化。
2.8.2 AOF持久化
将写命令添加到AOF文件的末尾,需要使用设置同步选项:
随着写请求的增多,AOF会越来越大。redis提供AOF重写的特性,去除AOF文件的冗余写命令。
评论