本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循 署名-非商业用途-保持一致 的创作共用协议.
Redis Introduction
Redis
是一个用C语言实现的key-value store. 除了最基础的基于字符串的键值对,Redis可以是更加复杂的数据结构,所以redis也常被称为是一个data structure server(数据结构服务器)
Redis支持的数据结构列表:
- String(字符串)
- List(列表, 基本的
链表
) - Set(元素唯一的, 无序的集合)
- Sorted Set(类似于Set, 但是每个字符串元素关联一个浮点数score, 用于排序)
- Hash(哈希)
- Bitmap
- HyperLogLogs
本篇没有涵盖Bitmap和HyperLogLogs的使用
Redis Install
在 Redis下载页面 下载需要版本的redis
运行Redis的服务器端
运行Redis的交互式客户端
在.zshrc设置快捷启动
Redis keys
Redis keys是二进制安全的, 可以使用任何二进制序列作为key, 空的字符串也是有效地key
Redis Strings
使用字符串作为value时, 我们在string key和string value之间建立了映射关系
- value不能大小不能操作
512MB
-
SET
命令设置键值对, 重复设置key的value, 会覆盖原来的value -
GET
命令通过key检索value -
INRC
命令将给定key的value看做整型, 实现 加一
操作, 这个命令是 原子性的
(原子性中是事务ACID特性之一) -
GETSET
命令通过新的value设置key, 并返回旧的value -
MSET
和 MGET
命令分别用于同时设置或检索多个key -
EXISTS
命令, 如果给定的key存在返回1, 否则返回0 -
DEL
命令删除key-value对
Redis 定时器
-
EXPIRE
命令提供定时器功能, 设置key只能存在固定时间, 时间到key会被删除( 以秒为单位
) -
TTL
用于查询key还有多长时间被删除.
TTL返回 -2
表示key已经被删除, TTL返回 -1
表示key不会expire
Redis Lists
链表的实现优点是快速的插入和删除, 缺点是检索相对数组实现List慢
-
LPUSH
命令从List的头部插入一个或多个value, 返回插入后的list长度 -
RPUSH
命令从List的尾部插入一个或多个value, 返回插入后的list长度 -
LLEN
命令返回List的长度 -
LRANGE
命令从List取出固定一段 子List
(类似于python中的切片操作), 有两个索引参数, 都可以为负数 -
LPOP
命令从尾部删除value -
RPOP
命令从头部删除value, 没有value可删时返回nil
Redis Sets
-
SADD
命令向set中增加元素, 如果元素已存在则返回0, 否则返回1 -
SMEMERS
命令返回set集合, 返回的集合与插入时的顺序无关 -
SISMEMBER
命令测试元素是否在set中, 在返回1, 不在返回0 -
SREM
移除set中的元素 -
SUNION
命令链接多个set集合
Redis Sorted Sets
Sorted Set类似于Set和Hash的混合, Sorted Set中的元素也是唯一不重复的字符窜元素, Set中的元素无需, Sorted Set中通过浮点数score排序
, Sorted Set通过 跳表
和 哈希表
实现, 增加一个元素的复杂度 O(log(N))
排序原则:
- score不同时, A.score > B.score => A > B
- score相同时, A.score = B.score => A和B通过比较字符串的
字典序
进行排序
-
ZADD
命令增加带score的元素, 可以传入多个score-value对 -
ZRANGE
命令类似于 LRANGE
操作, -
ZREVRANGE
命令反序输出Sorted set元素片段
Redis Hashes
-
HSET
命令设置key中field和field应对的value -
HMSET
命令用于设置哈希中的多个field -
HGET
命令用于检索单个field -
HMGET
命令用于检索多个filed -
HGETALL
命令获得key的所有的field和field对应的value
Reference