Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并且借助许多高级层次的接口使其可以胜任,如缓存、队列系统的不同角色。
Redis的特性
- 多种数据类型存储
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
- 内存存储与持久化
- 内存的读写速度远快于磁盘
- 自身提供了持久化功能(ROB、AOP两种方式)
- 功能丰富
- 可以做缓存、队列、消息订阅/发布
- 支持键的生成时间
- 按照一定规则删除相应的键
- 简单稳定
- 相比SQL而言更加简单
- 不同语言的客户端丰富
- 基于C语言开发,代码量只有3万多行
Linux版本 2.8.11 : http://download.redis.io/releases/redis-2.8.11.tar.gz
Windows(64位)版本 2.8.9 : https://github.com/MSOpenTech/redis/blob/2.8/bin/release/redis-2.8.9.zip?raw=true
Windows(32位)版本 2.6 : https://github.com/MSOpenTech/redis/blob/2.6/bin/release/redisbin.zip?raw=true
- Redis Release Notes.docx 文件是关于Redis的描述文件
- redis.windows.conf 文件是默认的配置文件
- RedisService.docx 安装手册
文件名 | 说明 |
Redis-server | Redis服务器 |
Redis-cli | Redis命令行客户端 |
Reids-benchmark | Redis性能测试工具 |
Redis-check-aof | AOP文件修复工具 |
Reids-check-dump | RDB文件检查工作 |
- 注册服务: redis-server --service-install redis.windows.conf --loglevel verbose
- 卸载服务: redis-server --service-uninstall
- 启动Redis: redis-server --service-start
- 停止Redis: redis-server --service-stop
使用PING命令测试与客户端和服务端链接是否正常
redis-cli PING 或 redis-cli redis 127.0.0.1:6379> PING PONG
- 状态回复(最简单的回复) redis> PING PONG redis> SET test 123 OK
- 错误回复(以error开头,后面跟着错误信息) redis> TEST (error) ERR unknown command 'TEST‘
- 整数回复 redis> INCR test_incr (integer) 1
- 字符串回复(最常用的一种回复,双引号包裹) redis> get test "123"
- 多行字符串回复 redis> KEYS * 1) "test" 2) "test_incr" 3) "1"
- 选择1号数据库 select 1
- Redis不支持自定义数据库名称。
- Redis不支持为每个数据库设置访问密码
- Redis的多个数据库之间不是完全隔离的,FLUSHALL命令会清空所有数据库的数据。
- Redis的多个数据库之间不是完全隔离的,FLUSHBD命令会清空当前数据库的数据。
- 判断一个键是否存在 exists key (1代表存在0代表不存在)
- 删除一个或多个键,返回值是删除的键的个数 del key[key...]
- 获取键值的数据类型 type key[key...]
- 一个字符串类型键允许存储的数据最大容量是512MB。
- 递增数字 incr key
- 增加指定的整数 incrby key incremaent
- 减少指定的证书 decr key decrement
- 向尾部追加值 append key value 如果键不存在则将该键的值设置为value,即相当于 SET key value。返回值是追加后字符串的总长度。
- 获取字符串长度 strlen key 返回键值的长度,如果键不存在则返回0
- 同时设置/获取多个键值 mset key value[key value...] mget key [key ...]
- Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。expire key seconds TTL查看剩余多少时间
- 清除生存时间 persist key 重新设置值也会清除生存时间
- 生存时间设置单位pexpire key milliseconds
散列类型
- 赋值与取值
- HSET key field value
- HGET key field
- HMSET key field value [field value ...]
- HMGET key field [field ...]
- HGETALL key
- HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0.
- 判断字段是否存在。 HEXISTS key field
- 增加数字 HINCRBY key field increment
- 删除字段,可以删除一个或多个字段,返回值是被删除的字段个数 HDEL key field [field ...]
- 只获取字段名或字段值 HKEYS key HVALS key
- 获取字段数量 HLEN key
Redis的应用举例
- 缓存(数据查询、短连接、新闻内容、商品内容等等)(最多使用)
- 分布式集群架构中的session分离
- 聊天室的在线好友类表
- 任务队列(秒杀、抢购、12306)(左进右出,右进左出)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒)
在windows平台下默认的配置文件是:redis.windows.conf,这里面配置了非常多的信息,一般配置保持默认,在一些特定的场景下可以自定义配置,常用到的配置项如下:
port -- 服务端口 bind – 绑定ip其他ip不能访问(多个ip空格隔开)
databases – 数据库数量,默认16个
daemonize – 设置为守护进程(Linux平台)
maxmemory – 最大的内存大小(1MB、1GB、1m、1g)
maxmemory-policy -- 达到内存限制后的处理策略(后面详细说明) 修改后配置文件需要重启Redis服务才能生效
Redis内存使用优化与存储 http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage
Redis复制与可扩展集群搭建 http://www.infoq.com/cn/articles/tq-redis-copy-build-scalable-cluster Redis
设计与实现 https://redisbook.readthedocs.org/en/latest/ SpringSource
发布Spring Data Redis 1.0.0 http://www.infoq.com/cn/news/2012/01/spring-data-redis-1-0-0
Redis内存存储结构分析 http://www.searchtb.com/2011/05/redis-storage.html