参考文档:http://redis.cn/
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
1、Redis分布式锁
Redis提供了一个只有在某个key不存在的情况下才会设置key的值的原子命令,该命令也能设置key值过期时间,因此使用该命令,不存在加锁后服务器宕机出现的问题,该命令为:
SET my_key my_value NX PX milliseconds
其中,NX表示只有当键key不存在的时候才会设置key的值,PX表示设置键key的过期时间,单位是毫秒。
参考文档:http://redis.cn/articles/20181020004.html
2、Redis支持的数据类型
2.1、string字符串
格式: set key value
2.2、Hash
格式: hmset name key1 value1 key2 value2
Redis hash 是一个键值(key=>value)对集合。
2.3、List
1)格式: lpush name value
在 key 对应 list 的头部添加字符串元素
2)格式: rpush name value
在 key 对应 list 的尾部添加字符串元素
3)格式: lrem name index
key 对应 list 中删除 count 个和 value 相同的元素
4)格式: llen name
返回 key 对应 list 的长度
2.4、Set(集合)
格式: sadd name value
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
2.5、zset(sorted set:有序集合)
格式: zadd name score value
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
3、Redis持久化
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供了两种持久化方式:RDB(默认) 和AOF
3.1、RDB
是Redis DataBase缩写,RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数。
3.2、AOF
Aof是Append-only file缩写,AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作
aof写入保存:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
4、Redis的操作是原子性
是因为Redis是单线程的。
对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。