Redis整理
Redis简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis 官网
中文官网:http://www.redis.cn/
英文官网:https://redis.io/
理解
1.Redis是Key-Value数据库是非关系型数据库的一种, 顾名思义redis数据库在做数据存储时都必须携带有Key,这里的Key是索引数据的必要条件,而与之对应的Value则代表Redis数据库支持的数据结构类型,常用的类型有五种,分别是字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)。
2.Redis基于内存的单线程运行,单行redis命令是线程安全的。
3.Redis对事物是半支持(语法错误会回滚,而运行错误则不会);事务中的所有命令会被序列化、按顺序执行,在执行的过程中不会被其他客户端发送来的命令打断;队列中的命令在事务没有被提交之前不会被实际执行;redis中的一个事务中如果存在命令执行失败,那么其他命令依然会被执行,没有回滚机制。
4.可以用RPOPLPUSH, 或者lua脚本,实现多个redis操作合为一个命令。
命令与结构
链接:http://www.redis.cn/commands.html#
中文官网演示如下图:可以在命令tab页查询相关命令操作,这里主要以红色箭头标注的命令为主
Redis key
命令
个人理解
redis对数据的管理都需要依据key来进行操作,而且可以对key设置过期时间,从而实现定期过期数据的功能
strings
命令
结构
理解
一个Redis key对应一个value,每个value可以有自己的过期时间,String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据如数字,字符串,jpg图片或者序列化的对象。
场景
1.缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。
2.计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
3.session:常见方案spring session + redis实现session共享,
hashes
命令
结构
理解
一个Redis key对应一个map ,每个map key 对应一个map value,整个map公用一个Redis key,公用同一个Redis key的过期时间;
场景
1.缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。
lists
命令
结构
理解
一个Redis key对应一个list ,整个list公用一个Redis key,公用同一个Redis key的过期时间;list是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。
场景
1.timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。