redis数据结构
-
string
1、value是一个string,如果是数字型的string,则可在基础上加减
2、value是一个string,则可直接操作字符串的附加(append)操作 -
list
1、无序的,但是是按照插入顺序排序的(本身是无序的,但是是以插入顺序储存的)
2、redis中的list的内部实现是链表(具有内部是链表结构的特性),而java中的list的内部实现是数组
3、因为redis的list是链表结构,所以在表头或者表尾删除添加效率非常高,如果在中间的话,效率特别低(需要遍历找出所在位置) -
set
1、没有按照插入的顺序储存
2、元素不能重复,如果重复则插不进去
3、可以求交集、并集、差集等 -
sort-set
1、没有按照插入的顺序储存
2、元素不能重复,如果重复则插不进去
3、每个元素都会携带一个score与之关联,(score会按照从小到大的顺序排列) -
hash
1、可以存储用户信息(user的name、age、address)
redis特性
1、一个redis最多16个数据库(0-15)
redis的订阅与发布
- subscribe channel (订阅频道,例如:subscribe mychat)
- psubscribe channel* (批量订阅频道,例如 psubscribe my*(以myk开头的))
- public channel content (在指定频道中发布消息)
redis持久化
-
RDB持久化(默认支持,无序配置)
制定时间将内存中的数据写入磁盘
优化:
缺点: -
AOF持久化
以日志的形式记录服务器所处理的每一个操作,在服务器启动之初会读取改文件来重新构建数据库,以保证启动后数据库的数据完整
有三种同步:每秒同步、每修改同步,不同步 -
无序持久化
通过配置来设置关闭持久化(这样就是一个纯缓存) -
同时使用rdb和aof
-
持久化总结:
1、对于相同大小的文件,aof文件通常大于rdb文件
2、根据同步策略的不同,aof在运行效率上慢于rdb,总之,每秒同步策略较高,同步禁用策略效率和rdb一样高效
redis 事务
开启事务:multi (对应mysql的 begin transaction)
提交:exec (对应mysql的 commit)
回滚:discard (对应mysql的rollback)
redis 说道
eg:50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s(仅供参考)
- 传统数据库的弊端
1、数据库的高并发读写需求(传统的每秒几万读取还撑得住,如果是写的话,磁盘io困难)
2、对海量数据的高效存储和访问(都是pb级别)
3、数据库的高扩展和延伸(横向扩展,添加节点) - redis使用场景
1、缓存(数据查询,短连接,新闻内容,商品内容等)(最多使用)
2、聊天室的在线好友列表
3、任务队列(秒杀,抢购,12306)
4、应用排行榜
5、网站统计分析
6、数据过期处理
7、分布式集群架构中的session分离
8、rpoplpush(消息队列的使用)
9、set 的唯一性和 (交集、并集)应用于服务器
10、sort_set可用于游戏排名(用户积分排名因为score 可进行排序)
网友评论