1.Redis是一种基于键值对的NoSQL数据库
2.Redis天生的单线程模型
3.开发者无论在用什么样的编程语言,开发什么样的项目都会有使用到将数据缓存在内存中的场景
4.Redis缓存基本数据结构及其应用场景:
(1)经常遇到需要将配置信息、热点高频数据、统计数据、高性能需求数据缓存到String、List、Map等数据结构的需求
(2)在缓存数据时需要根据需求选择合适的数据结构,Redis中提供了5种基本的数据结构
(3)基本数据结构---String
<1>String:字符串
1.字符串是Redis中最基本的数据结构
2.Redis中的健都是以字符串进行存储的
3.字符串可以是简单字符串、复杂字符串(JSON、XML)、数字(整形、浮点型)、二进制(图片、音频、视屏)
4.其最大值不能超过512MB
<2>字符串的使用场景
1.可以将对象转换成json字符串存储在Redis中
2.分布式服务器中可以使用字符串存储用户session,保证请求在路由到新机器时能够识别用户身份无需二次登录
3.字符串存储数字时可以实现高性能分布式线程安全的的快速计数,实现很多统计功能
<3>String常用操作方法:
1.get——获取key对应的值
2.mget——批量获取多个key的值,如果不存在则返回nil
3.incr && incrby——incr对key对应的值进行加加操作,并返回新的值;incrby加指定值
4.decr && decrby——decr对key对应的值进行减减操作,并返回新的值;decrby减指定值
(4)基本数据结构---Hash
<1>Hash:哈希类型
1.哈希类型可以看做java中的map类型
2.Hash是一个String类型的field和value之间的映射表,key(表名称)对应的value实际为一个HashMap
3.Mybatis官方已经集成了基于Redis的第三方缓存工具,默认数据类型就是Hash,默认接口Cache
<2>哈希的使用场景
1.哈希可以存储关系型数据库表中的字段和值
2.Hash特别适合存储对象,可以将用户信息存储在hash,用户Id作为Redis的Key
<3>Hash常用操作方法:
1.hset——设置key对应的HashMap中的field的value
2.hget——获取key对应的HashMap中的field的value
3.hgetall——获取key对应的HashMap中的所有field的value
(5)基本数据结构---List
<1>List:列表类型
1.用于存储多个有序的字符串
2.在Redis中可以对列表的两端进行插入和弹出(类似java中的Deque双端列队)
3.可以像数组一样通过下标获取对应的值
4.双向链表的结构使其既可以充当栈也可以充当列队的角色
<2>列表的使用场景
1.使用其从左边push右边pop的特性实现消息列队
2.比如注册成功后的邮件通知使用Redis消息列队相比于MQ中间件将更加轻量易于维护
3.使用列表的有序性以及可以按下标和范围查找的特性缓存数据库中的需要分页显示的列表数据
4.微信朋友圈的动态就使用list进行实现,有好友发布动态时就向list中存储动态的id,有序性保证了时间轴的实现
<3>List常用操作方法:
1.lpush——在key对应的list的头部添加一个元素
2.lrange——获取key对应的list的指定下标范围的元素,-1表示获取所有元素
3.lpop——从key对应的list的头部删除一个元素,并返回该元素
4.rpush——在key对应的list的尾部添加一个元素。
5.rpop——从key对应的list的尾部删除一个元素,并返回该元素
(6)基本数据结构---Set
<1>Set:集合
1.用来保存多个不同的字符串元素
2.和java中的set一样,集合是无序的不能用下标进行访问
3.创建一个HashSet的时候实际上创建了一个HashMap
4.Set中的元素,只是存放在了底层HashMap的key上,遍历HashSet的时候从HashMap中取出keySet来遍历
<2>Set集合的使用场景
1.集合的唯一性可以用来存储标签系统中的tag如用户的兴趣爱好或是新闻系统中用户关注的栏目等
2.支持集合间的交集、并集、差集运算
3.这种特性非常方便地解决了社交网络应用中的很多需求,如共同关注、共同喜好、二度好友等功能
4.Redis提供随机获取集合中元素的api可以用于生成随机数的业务中如抽奖系统等
<3>Set常用操作方法:
1.sadd——在key对应的set中添加一个元素
2.smembers——获取key对应的set的所有元素
3.spop——随机返回并删除key对应的set中的一个元素
4.sdiff——求给定key对应的set与第一个key对应的set的差集
5.suion——求给定key对应的set并集
6.sinter——求给定key对应的set交集
(7)基本数据结构---Zset
<1>Zset:有序集合
1.Zset的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序
2.HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score
3.有序集合增加了获取指定分数的元素和元素范围查找、计算成员排名功能
<2>Zset有序集合的使用场景
1.可以用在社交和游戏中的排行榜需求中
2.按时间排序的时间轴
<3>Zset常用操作方法:
1.zadd ——在key对应的zset中添加一个元素
2.zrange——获取key对应的zset中指定范围的元素,-1表示获取所有元素
3.zrem——删除key对应的zset中的一个元素