【一】redis是什么?
redis是一个开源的,基于键值的存储系统,具有String,Hash,List,Set,Sort Set多种数据结构,高性能,功能丰富
【二】redis的特性?
速度快:因为redis是纯内存操作,单线程模型,导致redis的性能非常的快,官方给出的数据,每秒可以处理10万次读写操作
持久化:redis可以通过rdb或者aof,定期通过异步操作将数据flush到硬盘上进行保存,从而即使因为不可抗拒的因素宕机,重启之 后数据依旧存在。
多种数据结构类型:除上面提到的五种数据结构类型,还包括了BtMaps位图,HyperLogLog超小内存唯一值计数,GEO地理信息 定位。
支持多种编辑语言:
功能丰富:可以实现诸如发布订阅,Lua脚本,事务,pipeline等相关功能
简单: redis不依赖外部库,单线程模型
主从复制:
高可用,分布式:redis-sentinel支持高可用,redis-cluster支持分布式
【三】redis的缺点
redis数据存储的容量受到内存的限制,不能用作海量数据的高性能读写,因此redis适合在较小数据量的高性能操作和运算上
【四】redis的数据结构类型
【五】redis常见的使用场景
String:常规的键值对缓存应用,通过incr,decr实现微博数,粉丝数常见社交系统的计数
Hash:存储部分的数据,免于和数据库交互,增加用户体验
List:list的实现是一个双向链表,通过push和pop操作从列表的头部或者尾部添加或者删除元素,相当于既可以当作栈,又可以当作队列
使用场景:使用list构建消息队列系统,比如用redis用作日志收集器,多个端点将日志信息写入redis,然后一个worker统计将日志写到磁盘中
取最新N个数据的操作
Set:对外提供的功能和list类似,是一个列表的功能,无序,特殊之处是其可以自动排重。可以实现交集,并集,差集。比如贴吧中的共同关注
sort set :通过提供一个权重参数,使得数据自动排序,排行榜
详细概述
缓存:合理的使用缓存不仅能够提升网站的访问速度,还能大大降低数据库的压力,redis提供了键过期的功能,也提供了灵活的键淘汰策略。
排行榜:redis提供有序的集合数据类型能实现复杂的排行榜应用
计数器:商品的浏览量,视频的播放量,为了保证数据的实时性,每次浏览+1,并发量高的时候每次如果都请求数据库的话,无疑给后者增加了很大的压力,redis提供了incr命令实现计数器的功能,内存操作,性能非常的好
分布式会话:集群模式下,在应用不多的情况下一般使用容器自带的session复制功能就可以,但当集群过多的话,session复制会过多的浪费资源,一般会搭建以redis等内存数据库位中心的session服务,session不在由容器管理拉。
分布式锁:系统的复杂性必会走向分布式,但分布式却因此带来的并发问题,如全局id,减酷讯,秒杀。并发量不大的场景可以使用数据库的悲观锁,乐观锁实现。但在并发量高的场合中,利用数据库锁机制来控制资源的并发访问时不理想的,大大影响了数据库的性能。可以用redis的setnx功能编写分布式锁,如果设置返回1说明获取锁成功。
社交网络:点赞,踩,关注/被关注,共同好友社交
最新列表:redis列表结构,Lpush可以在列表头部插入元素,Ltrim限制列表的数量
消息系统:redis提供发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统
【六】常用的命令
通用命令:
keys-->keys * :获取所有得key
dbsize-->dbsize:获取key得总和个数
exists key:判断key是否存在,存在返回1,不存在返回0
del key:删除指定得key,或者删除多个key(del name age)
type key:判断key的类型
expire key second:给key设置一个秒级的过期时间
ttl key:查看key剩余的过期时间(-2不存在,-1代表存在,没有设置过期时间)
persist key:撤销key的过期时间
String:get,set,del,incr,decr,incrby,decrby,incrbyfloat,mget,mset
getset:设置新得值,返回旧的值
append key value:追加新的值
getrange:返回索引之间的数据
setrange:设置索引的数据
setnx:key不存在才设置值
set key value xx:key存在的时候才设置值
Hash:hget,hset,hdel,hexists,hlen,hmget,hmset
hgetall key:获取所有的field和value
hvals key:获取所有的value
hkeys key:获取所有的field
List:
lpush 从列表左侧头部添加数据
rpush 从列表右侧头部添加数据
lpop 从给左侧头部取出一个元素
rpop 从右侧尾部取出一个元素
lrange key 0 -1:取出全部的元素
lrem:删除列表指定的元素
lindex:获取对应下标的值 ;llen:获取列表的长度
ltrim:修剪列表 ltrim key begin end
lset:修改坐标小的值 lset key 下标 value
linsert key before 下标 value:指定位置添加元素
set常用命令,集合中的元素无序且唯一
sadd:sadd key value添加元素
smembers:smembers key查看集合中所有元素
srem:srem key value删除集合中指定元素
scard:scard key返回集合中元素的个数
SRandMember:
smove:将一个集合的元素转移到另外一个集合中
spop:从集合中随机移出一个元素
sismember:sismember key value判断value是否存在集合中,存在返回1
sscan:使用游标获取集合中的值
sunion:集合并运算 sunion key1 key2
sunionstore:sunionstore key key1 key2 将并集合并到key中
sinter:公共的合并一起 sinter key1 key2
sinterstore:sinterstore key key1 key2
sdiff:sdiff key1 key2 差集 key1 - key2
sdiffstore:sdiffstore key key1 key2
zset相关命令
zadd:添加元素 zadd key score value
zrem key :删除元素
zscore key value;返回key的分数
zincrby key 增加或减少元素的分数
zcard key返回元素的总个数
zrange:返回指定索引范围内的元素
zrangebyscore key start end withscores
zcount key minScore maxScore:返回分数之间的个数
zremrangebyscore key minScore maxScore删除指定分数内的元素