介绍
Redis是一个非关系型数据库,常用于缓存数据和分布式加锁。
优先请参考文档:http://redisdoc.com/index.html
五大数据结构
1.String结构
单值缓存
SET key value
GET key
对象缓存
最后面两种的好处是单个列的缓存更新的时候更加方便 不用同步整个用户的数据。
SET user:1 value(json数据)
MSET user:1:name benzhu user:1:sex 男
MGET user:1:name user:1:sex
分布式锁
将key的值设置为value,当且仅当key不存在,结果成功返回1,失败返回0:
SETNX key value
执行完业务释放锁,也就是删除key:
DEL key
将key值设置为value,并将设置key的生存周期,防止程序意外的终止导致死锁:
setex key seconds value
计数器
自动为value加1
INCR key
分布式系统全局序列号
为键 key 储存的数字值加上增量 increment,一般用于批量的划分序列号给程序,防止数据库自增ID冲突:
INCRBY key increment
2.hash哈希
单值存储
存储一个哈希表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
对象存储
就是存储多个键值对:
HMSET user name value sex value
取出多个键值对:
HMGET user name sex
优点:
整合存储,方便管理
相比String消耗内存与CPU更小
相比String更省空间
缺点:
过期功能不能使用在fieId,只能用于key,Redis集群架构下不适合大规模使用。
3.List列表
常用操作
将一个或者多个值插入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
数据结构实现
Stack(栈):LPUSH + LPOP
Queue(队列):LPUSH + RPOP
Blocking MQ(阻塞队列):LPUSH + BRPOP
4.Set集合
常用操作
往集合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]
运算操作
交集运算:
SINTER key [key...]
交集结果放入新集合destination:
SINTERSTORE destination key [key...]
并集运算:
SUNION key [key...]
并集结果放入新集合destination:
SUNIONSTORE destination key [key...]
差集运算:
SDIFF key [key...]
差集结果放入新集合destination:
SDIFFSTORE destination key [key...]
5.zset(有序集合)
也称Sorted-Set
常用操作:
往有序集合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
集合操作
并集运算:
ZUNIONSTORE destkey numkeys key
交集运算:
ZINTERSTORE destkey numkeys key
6.通用操作
1.查看所有key:
keys *
2.筛选benzhu开头的key:
keys benzhu?
3.判断key是否存在,存在返回1,不存在返回0:
exists key
4.key重命名:
rename oldkey newkey
5.设置number过期时间,单位为秒:
expire key number
6.key超时所剩时间:
ttl key
7.key的类型返回:
type key
8.更换数据库
redis中有16个数据库可以选择,默认为0;
select 0-15
9.移动key到别的数据库:
move key 0-15
7.事务
1.开启事务:
multi
2.提交事务:
exev
3.回滚:
discard
8.持久化
RDB持久化
默认开启,将某个时间点的所有数据都存放在硬盘上。数据量随着时间而增大,故障会丢失最后一次快照之后的数据。
生成单独的文件,方便进行恢复,性能最大化。
AOF持久化
将写命令添加到AOF文件的末尾,需要使用设置同步选项:
选项 | 介绍 |
---|---|
always | 每个写命令都同步,最安全但是会降低服务器性能,效率低。 |
everysec | 每秒同步一次,崩溃后丢失一秒左右的数据。 |
no | 让操作系统决定何时同步,提升不大。 |
随着写请求的增多,AOF会越来越大。redis提供AOF重写的特性,去除AOF文件的冗余写命令。