Redis特点(C 实现的)
- 内存存储,查询速度快,经常用作缓存服务器
- 支持数据持久化,重启会加载持久化的数据,支持不同级别的数据持久化策略,所以可以当作数据库来用,有2种持久化方案。另外可以关闭持久化功能,当纯内存数据库用,提升性能。
- 支持丰富数据类型,支持string,list,set,sorted set,hash
- 支持事务,操作都是原子性
- 支持Lua脚本
- LRU的过期淘汰策略
- 支持过期删除:按key设置过期时间,过期后将会自动删除
- redis是单线程IO复用(读写排序等操作公用唯一的线程),事件驱动(文件事件和时间事件)
- 除了存储还支持排序等聚合操作
- 支持集群和高可用,cluster集群的话,支持在线扩容。Sentinel的话,支持Mster和Slave的监控和身份切换
- 支持sub/pub
Redis的应用
- 分布式环境的计数器(或者是浏览量统计工具,利用incr函数的原子性来实现)(原子性)
- 注册中心,在Dubbo中可以用
- 分布式锁,悲观锁、乐观锁、Redlock等(原子性)
- 消息队列(Pub/Sub + Redis List)
- 高性能数据库,因为加入的数据会被持久化,所以具备数据库的功能
- 缓存服务器,内存查找(内存存储)
Redis的数据结构
https://redis.io/topics/data-types-intro
完整的介绍,函数太多了
https://www.cnblogs.com/Cwj-XFH/p/6938799.html
string,list,set,sorted set,hash
- String:不是一般的String,支持字符串、整数、浮点数都是Binary String在Redis中,key为 整数的话,可以执行 INCR、INCRBY、DECR、DECRBY等函数
- List:LinkedList,支持在首位两端插入和移除操作,也支持基于Index的遍历查询,lpush(往head插入) 、rpush(往tail插入)、lpop、rpop 、lrange key 0 -1、LINDEX
- Redis Sets:无序的String 去重集合, sadd key value 添加、smembers key 遍历查看、sismember key 精确查询
- Sorted Sets:去重功能+ Score功能,Score可以重复, key的话有去重的功能,默认存储最后一次set的值
- Hash
Redis支持的函数
- set 、get
- mset 、mget:批量set 批量get
- GETSET 原子操作,返回之前的值,没有设置就返回nil
- exists 存在返回1 不存在返回0
- expire key 5 (单位是秒)
- zadd
mset a 10 b 20 c 30
mget a b c
# Sorted Set
ZADD runoobkey 1 redis
ZADD runoobkey 2 mongodb
ZADD runoobkey 3 mysql
ZRANGE runoobkey 0 10 WITHSCORES
参考资料
redis 5种数据结构和相关命令
https://www.cnblogs.com/Cwj-XFH/p/6938799.html
好的博客,待刷一下
https://blog.csdn.net/zhiguozhu/article/details/50517527
要看完 redis和memcached的区别
http://blog.jobbole.com/101496/
redis的数据结构超级详细
https://www.cnblogs.com/qwangxiao/p/8921171.html
网友评论