Redis
大名鼎鼎的redis估计是无人不知,redis作为一个缓存数据库,是非常优秀的存在,主要有三个特点:
- redis支持数据的持久化,可以将缓存中的数据保存到磁盘中;
- redis支持五种结构的数据,string、hash、list、set、zset;
- redis支持数据的备份,支持master-slave模式数据备份。
优势:
- redis的速度很快,读速度是每秒110000次,写速度是81000次,所以性能很好。
- 数据类型丰富,支持各种业务场景下的应用。
- redis的单条操作都是原子操作,也支持事务,即多条操作要么都成功,要么都不成功。
- 提供丰富的特性,比如发布订阅模型,可以把它当作消息队列使用。
基本数据类型:
string
string类型是最基本的类型,key-value的格式存储,就是编程时的map关系,最大值为512MB,redis的string是sds字符串,非常高效,且节约内存。
最常用的操作就是set和get操作:
set str s
get str
hash
hash本来就是key-value型的数据结构,在redis中hash类似于json的结构,一个key-[k-v,k-v…],也就是说,一个key下面存储着多个k-v结构。比如:xiaowang-[name-xiaowang,age-15,high-185]
主要就是这么一个结构,常用操作就是:
hmset xiaowang name xiaowang age 15 high 185 //设置一个hash记录
hget xiaowang name//获取某一个字段的值
hgetall xiaowang //获取所有字段
list
list这个类型就相当于C++中的vector,或者更形象的就是python中的list,还支持切片操作,其实就跟python的非常相似。
常用操作:
lpush list 1//左插入一条
lrange list 1 10//取范围1-10的元素,切片操作
set
集合是无序的,元素不能重复,redis的集合是通过hash表实现的,所以增删改查的时间复杂度都是O(1),C++中的set和map底层使用红黑树实现,性能略低。
集合,常用操作
sadd key 1
sadd key 2
smembers key
zset
有序集合,zset中每一个元素都关联一个double的权重,元素按照权重从小到大排序。元素唯一,权重可以重复
常用操作:
zadd key score member
zrangebyscore key 0 1000//取某个分数之间的元素
总结:
redis中这五种类型可以适用在不同的业务场景,具体业务场景选取具体的数据类型。