Redis的数据类型及如何在Java中操作Redis,配置连接池
介绍
什么是redis,常用开发场景是什么
Redis是一个基于内存的key-value数据库,它是[Remote Dictionary Servicel]的首字母缩写,也就是远程字典服务。
基于诶存存储,读写性能高
适合存储热点数据(热点商品、资讯、新闻)
企业应用广泛
Redis介绍
Redis 是一个开源 (BSD 许可证)、内存中的数据结构存储,用作数据库、缓存、消息代理和流处理引擎。Redis 提供了字符串、哈希、列表、集合、有序集合、位图、HyperLogLogs、地理空间索引和流等数据结构。Redis 内置了复制、Lua 脚本、LRU 淘汰、事务、不同级别的持久化,并通过Redis Sentinel提供高可用性,并通过Redis Cluster进行自动分区。
你可以在这些类型上运行 原子操作 ,比如向字符串追加; 递增哈希中的值;向列表中推送元素; 计算集合的交集、并集和差集; 或者获取排序集中排名最高的成员。
要实现最佳性能,Redis与内存数据集配合工作。根据您的用例,Redis可以通过定期将数据集转储到磁盘或通过将每个命令附加到基于磁盘的日志来持久化数据。如果您只需要一个功能丰富的网络化内存缓存,还可以禁用持久化。
Redis支持异步复制,具有快速的非阻塞同步和在网络分裂时的自动重新连接和部分重新同步功能。
NoSql(Not Only Sql),不仅仅是sql,泛指非关系型数据库(数据库之间没有关系),并不是要取代关系型数据库,而是关系型数据库的补充。
数据库排行榜:
使用Redis能做什么
数据缓存
消息队列等等
Redis的数据类型(面试常考)
数据类型介绍
Redis的五种数据类型
redis是一种高级的key-value的存储系统,键是string类型,其中value支持五种数据类型,对于键和值的描述如下所示:
键(key):
[1] 键不能重复
[2] 作用:标识存储的数据
[3] 数据类型:String
[4] 命名规则:
1)不能太长:因为查询效率低,查询起来不方便
2)不能太短:容易重复,并且可读性差
3)按照规范:HEIMA_STU_LIST
值(value):支持五种数据类型
string 字符串类型,类似于java中string
hash 由键值对组成,类似于java中的map
list 列表类型,类似于java中的list,元素存取有序,可以重复
set 集合类型,类似于java中的set,元素存取无序,不可重复
sorted set/zset 有序的集合类型,每个元素有一个分数来决定他的顺序
String类型的操作命令
字符串类型String
字符串类型是Redis中最为基础的数据存储类型,它在Redis中以二进制保存,无论存入的是字符串、整数、浮点类型都会以字符串写入
在Redis中字符串类型的值最多可以容纳的数据长度是512M,这是以后最常用的数据类型
常用命令
更多命令可以参考redis中文网
补充:
批量操作:
mset name lisi addr sh
mget name age addr
del name age
使用场景
用户登录后端保存短信验证码,并设置失效时间;
代替后端session功能,实现分布式缓存(是将数据分散存储在多台独立的设备上)等
小结
1.添加值:set 键 值
2.获取值:get 键
3.删除值:del 键
hash类型的操作命令
概述
Redis中的Hash类型可以看成是键和值都是string类型的Map容器,每一个hash可以存储4G个键值对
该类型非常适合于存储对象的信息。如一个用户有姓名,密码,年龄等信息,则可以有username,password,age等键。它的存储结构如下:
常用命令
命令 | 功能 |
---|---|
hset 键 字段 值 | 添加键,字段,值 |
hget 键 字段 | 通过键,字段得到值 |
hmset 键 字段 值 字段 值 | multiply多个,一次添加多个字段和值 |
hmget 键 字段 字段 | 通过键,获取多个字段和值 |
hdel 键 字段 字段 | 删除一个或多个字段的值 |
hgetall 键 | 得到这个键下所有的字段和值 |
HKEYS 键 | 获取hash表中所有字段 |
HVALS 键 | 获取hash表中所有值 |
使用场景
购物车
以用户id为key,商品id为field,商品数量为value,恰好构成了购物车的三个要素,如下图所示:
小结
功能 | hash类型的操作命令 |
---|---|
添加值 | hset |
得到值 | hget |
删除值 | hdel |
添加多个字段 | hmset |
得到多个字段值 | hmget |
得到所有的字段值 | hgetall |
list类型 的操作命令
概述
在redis 中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部和右部添加新的元素。在插入时,如果该键并不存在,redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除,List中可以包含的最大元素数量是4G个
常用命令
使用场景
—微信朋友圈点赞,要求按照点赞顺序显示好友信息,如果取消点赞,移除对应好友信息
—list类型的range命令可以分页查看队列中的数据。可将每隔一段时间计算的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名等
小结
1.从左边添加元素:lpush
2.从右边添加元素:rpush
3.从左边删除元素:lpop
4.从右边删除元素:rpop
5.得到指定范围的元素:lrange
6.得到列表的长度:llen
set类型的操作命令
概述
在Redis中,我们可以将set类型看作为没有排序的字符集合,和LIst类型一样,我们也可以在该类型的数值上执行添加、删除或判断某一元素是否存在等操作。Set可包含的最大元素数量是4G,和List类型不同的是,Set集合中不允许出现重复的元素。
常用命令
应用场景
需要去重的少量信息,比如:身份证信息、手机号码等作为黑名单|白名单
共同好友查询,使用set的交集
eg:zhang:{11,22,33,44} lisi:{22,33,66,88}
zhangsan和lisi的共同好友:交集取22 33 即可
小结
1.添加元素:sadd
2.删除元素:srem
3.得到所有元素:smembers
4判断元素是否存在:sismember
zset/sorted set类型的操作命令
概述
Redis有序集合(sorted set)和set集合一样也是无序不可重复。不同的是每个元素都会关联一个分数(排序因子)。
redis正是通过分数来为集合中的成员进行从小到大的排序
有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可以存储40多亿个成员
常用命令
应用场景
b站视频点击量排名
新浪热点文章点击量、收藏量等排名
小结
命令 | 行为 |
---|---|
zadd | 添加 |
zrange | 查询 |
zrem | 删除 |
zcard | 个数 |
zrank | 索引号 |
zscore | 得到分数 |