Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 安装
$sudo apt-get update
$sudo apt-get install redis-server
Redis 启动
redis-server /etc/redis/redis.conf
Redis 连接
$redis-cli
redis 127.0.0.1:6379> ping
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)是redis最基本的类型,string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个键最大能存储512MB。
redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"
Hash(哈希)是一个键值对集合。Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
127.0.0.1:6379> HMSET user:1 username runoob password runoob points 200
OK
127.0.0.1:6379> HGETALL user:1
1) "username"
2) "runoob"
3) "password"
4) "runoob"
5) "points"
6) "200"
List(列表)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
Set(集合)是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "rabitmq"
2) "mongodb"
3) "redis"
zset(sorted set:有序集合)也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"
Redis Key命令
- DEL key 该命令用于在 key 存在时删除 key。
- DUMP key 序列化给定 key ,并返回被序列化的值。
- EXISTS key 检查给定 key 是否存在。
- EXPIRE key seconds 为给定 key 设置过期时间。
- EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
- PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。
- PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
- KEYS pattern 查找所有符合给定模式( pattern)的 key 。
- MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
- PERSIST key 移除 key 的过期时间,key 将持久保持。
- PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
- TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
- RANDOMKEY 从当前数据库中随机返回一个 key 。
- RENAME key newkey 修改 key 的名称
- RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
- TYPE key 返回 key 所储存的值的类型。
Redis 字符串(String)
- SET key value 设置指定 key 的值
- GET key 获取指定 key 的值。
- GETRANGE key start end 返回 key 中字符串值的子字符
- GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
- GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
- MGET key [key..] 获取所有(一个或多个)给定 key 的值。
- SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
- SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
- SETNX key value 只有在 key 不存在时设置 key 的值。
- SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
- STRLEN key 返回 key 所储存的字符串值的长度。
- MSET key value [key value ...] 同时设置一个或多个 key-value 对。
- MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
- PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
- INCR key 将 key 中储存的数字值增一。
- INCRBY key increment 将key所储存的值加上给定的增量值(increment) 。
- INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。
- DECR key 将 key 中储存的数字值减一。
- DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
- APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
Redis hash 命令
- HDEL key field2 [field2] 删除一个或多个哈希表字段
- HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。
- HGET key field 获取存储在哈希表中指定字段的值。
- HGETALL key 获取在哈希表中指定 key 的所有字段和值
- HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。
- HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
- HKEYS key 获取所有哈希表中的字段
- HLEN key 获取哈希表中字段的数量
- HMGET key field1 [field2] 获取所有给定字段的值
- HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
- HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
- HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。
- HVALS key 获取哈希表中所有值
- HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。