基础
- Redis 是一个开源免费的
key-value
数据库。性能高,丰富的数据类型,所有操作都是原子性的,还支持 publish/subscribe
, 通知, key 过期等等特性。
特点
- 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- 提供
list,set,zset,hash
等数据结构的存储。
- 支持数据的备份,即
master-slave
模式的数据备份。
场景
Top 5 Redis Use Cases
- Session Cache
- Full Page Cache (FPC)
- Queues
- Leaderboards/Counting
- Pub/Sub
Install
brew install redis
# To have launchd start memcached at login:
ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
# Then to load memcached now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
# Best way is `brew services`
brew services start redis
# Start Redis server via “launchctl”.
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
# Start Redis server using configuration file.
redis-server /usr/local/etc/redis.conf
# Stop Redis on autostart on computer start.
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
# Location of Redis configuration file.
/usr/local/etc/redis.conf
# Get Redis package information.
brew info redis
# Test if Redis server is running. If it replies “PONG”, then it’s good to go!
redis-cli ping
配置
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf
。你可以通过 CONFIG 命令查看或设置配置项。各配置项的说明可以参考Redis 配置。
需要注意的是 Redis 默认不是以守护进程的方式运行,可以通过该配置项修改。
Redis 命令
redis-cli
redis-cli -h host -p port -a password
INFO # 获取 redis 服务器的统计信息
PING # 查看服务是否运行
QUIT # 关闭当前连接
SELECT index # 切换到指定的数据库
SET w3ckey redis
DEL w3ckey
DEL
是一个命令,w3ckey
是一个键。 如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0
Redis 数据类型
Redis 支持五种数据类型:string,hash,list,set,zset
。
String
- redis 最基本的类型,可以理解成与 Memcached 一样的类型,一个 key 对应一个 value。
- 二进制安全的,可以包含任何数据。比如:jpg图片或者序列化的对象。
- 一个键最大能存储 512MB。
SET w3ckey redis
GET w3ckey
Hash
- 键值对集合,是 string 类型的 field 和 value 的映射表
- 特别适合用于存储对象
HMSET w3ckey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
HGETALL w3ckey
List
- 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
LPUSH w3ckey redis
LPUSH w3ckey mongodb
LRANGE w3ckey 0 10
Set
- Set 是 string 类型的无序集合
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
SADD w3ckey redis
SADD w3ckey mongodb
SADD w3ckey redis
SMEMBERS w3ckey
zset
- zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个 double 类型的分数。redis 通过分数来为集合中的成员进行从小到大的排序。
- zset 的成员是唯一的,但分数 score 却可以重复。
ZADD w3ckey 1 redis
ZADD w3ckey 2 mongodb
ZADD w3ckey 3 mysql
ZADD w3ckey 3 mysql
ZRANGE w3ckey 0 10 WITHSCORES
HyperLogLog
- HyperLogLog 是用来做基数统计的算法,在数学上,基数是集合论中刻画任意集合大小的一个概念。
- HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
- 因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
PFADD w3ckey "redis"
PFADD w3ckey "mongodb"
PFADD w3ckey "mysql"
PFCOUNT w3ckey
高级
发布订阅
创建了订阅频道名为 redisChat:
新打开一个 redis 客户端,在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。
PUBLISH redisChat "Redis is a great caching technique"
PUBLISH redisChat "Learn redis by w3cschool.cc"
事务
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。
- 事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:开始事务 -> 命令入队 -> 执行事务。
以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:
MULTI
SET book-name "Mastering C++ in 21 days"
GET book-name
SADD tag "C++" "Programming" "Mastering Series"
SMEMBERS tag
EXEC
管道技术
通常情况下一个请求会遵循以下步骤:
- 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
- 服务端处理命令,并将结果返回给客户端。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
管道技术最显著的优势是提高了 Redis 服务的性能。
Redis 的 Ruby 客户端,支持管道技术特性。
其它
参考