目录
认识NoSQL
NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。
认识Redis
Redis诞生于2009年,全称Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库.
特征:
-
键值(key-value)型,value支持多种不同数据结构,功能丰富
-
单线程,每个命令具备原子性
-
低延迟,速度快(基于内存、IO多路复用、良好的编码)
-
支持数据持久化
-
支持主从集群、分片集群
-
支持多语言客户端
Redis数据结构介绍
Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样
Redis通用命令
通用指令是部分数据类型的,都可以使用的指令,常见的有:
-
KEYS:查看符合模板的所有key
-
DEL:删除一个指定的key
-
EXISTS:判断key是否存在
-
EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
-
TTL:查看一个KEY的剩余有效期
通过help [command] 可以查看一个命令的具体用法,例如:
# 查看keys命令的帮助消息: 127.0.0.1:6379> help keys KEYS pattern summary: Find all keys matching the given pattern since: 1.0.0 group: generic
String类型
String类型,也就是字符串类型,是Redis中最简单的存储类型
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
-
string:普通字符串
-
int:整数类型,可以做自增自减操作
-
float:浮点类型,可以做自增自减操作
不管是哪种形式,底层都是字节数组形式存储,只不过是编码方式不同.字符串类型最大空间不能超过512MB
Hash类型
Hash类型,也叫散列,其value是一个无序字典,类似Java中的HashMap结构.
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
List类型
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构.既可以支持正向检索,也可以支持反向检索
特征:
-
有序
-
元素可以重复
-
插入和删除快
-
查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等
Set类型
Redis的Set结构与Java中的HashSet类型,可以看做是一个value为null的HashMap.因为也是一个Hash表,因此具备与HashSet类型的特征:
-
无序
-
元素不可重复
-
查找快
-
支持交集,并集,差集等功能
SortedSet类型
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类型,但底层数据结构差别很大.SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表.
特征:
-
可排序
-
元素不重复
-
查询速度快
因为有可排序功能,经常被用来实现排行榜的功能