redis 笔记
2015-08-29 22:34
639 查看
高性能key-value 数据库,可每秒处理超过10w条数据读写!
redis在每60秒以此更新,若更改达到1W则dump到硬盘中!每次dump数据fork一个子进程!
redis单线程单进程
redis读写分离模型:
一个master + 多个slave,master能同步到slave,slave不能同步到master!
redis所有操作都是原子操作
二进制安全,存储的所有的数据都是有意义的,无任何格式符号,按二进制格式存储!
数据类型:
字符串:
redis所有字符串都是二进制安全的,可以存储任何数据(字符串,图片,音频...),上限512M
get key
O(1) 因为redis用的动态字符串的库在每次分配空间的时候会增加一倍的可用空闲空间
BITCOUNT key [start] [end]
计算给定字符串中,被设置为
GETBIT key
offset返回位的值存储在关键的字符串值的偏移
当
量
对一个或多个保存二进制位的字符串
当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作
空的
GET key
返回
如果
假如
MGET key [key ...]
返回所有(一个或多个)给定
如果给定的
MSET key value [key value ...]
同时设置一个或多个
如果某个给定
MSET 是一个原子性(atomic)操作,所有给定
MSETNX key value [key value ...]
同时设置一个或多个
即使只有一个给定
MSETNX 是原子性的,因此它可以用作设置多个不同
logic object),所有字段要么全被设置,要么全不被设置。
SETEX key seconds value
将值
如果
这个命令类似于以下两个命令:
不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在
Redis 用作缓存时,非常实用。
PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置
SETBIT key offset value
对
位的设置或清除取决于
当
字符串会进行伸展(grown)以确保它可以将
2^32 (bit 映射被限制在 512 MB 之内)。
SETNX key value
将
若给定的
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
SETRANGE key offset value
用
不存在的
STRLEN key
返回
当
当
# 获取字符串的长度
redis> SET mykey "Hello world"
OK
redis> STRLEN mykey
(integer) 11
# 不存在的 key 长度为 0
redis> STRLEN nonexisting
(integer) 0
List
按插入顺序排列, push,pop,获取范围值list中存储字符串,按插入顺序排列, push,pop操作
最对2^32 -1 个元素
LPUSH命令插入一个新元素到列表头部,
RPUSH命令
插入一个新元素到列表的尾部
对一个空key执行其中某个命令时,将会创建一个新表
Redis列表主要的特性就是支持时间常数的
插入和靠近头尾部元素的删除
中间元素复杂度为 O(N)
列表可以用来当作消息传递的基元(primitive),例如,众所周知的用来创建后台任务的Resque Ruby库。
你可以使用列表做更多事,这个数据类型支持许多命令,包括像BLPOP这样的阻塞命令。请查看所有可用的列表操作命令获取更多的信息
set
数学中的集合概念,支持交、并、差!
SetZSet(Sorted Set)
每个有序集合 的成员都关联着一个评分,这个评分用于把有序集
合中的成员按最低分到最高分排列。
可以理解为一张一列存value,一列存顺序
(O(log(N)))完成添加,删除和更新元素的操作表
Hashes
Redis
Hashes是字符串字段和字符串值之间的映射,所以它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型。
支持数据类型
String
List
Set
SortedSet
Hashes
redis在每60秒以此更新,若更改达到1W则dump到硬盘中!每次dump数据fork一个子进程!
redis单线程单进程
redis读写分离模型:
一个master + 多个slave,master能同步到slave,slave不能同步到master!
redis所有操作都是原子操作
二进制安全,存储的所有的数据都是有意义的,无任何格式符号,按二进制格式存储!
数据类型:
字符串:
redis所有字符串都是二进制安全的,可以存储任何数据(字符串,图片,音频...),上限512M
redis 127.0.0.1:6379> SET name "yiibai" OK redis 127.0.0.1:6379> GET name "yiibai"set key value
get key
APPEND key
value
O(1) 因为redis用的动态字符串的库在每次分配空间的时候会增加一倍的可用空闲空间redis> EXISTS mykey (integer) 0 redis> APPEND mykey "Hello" (integer) 5 redis> APPEND mykey " World" (integer) 11 redis> GET mykey "Hello World" redis>
BITCOUNT key [start] [end]
计算给定字符串中,被设置为
1的比特位的数量
redis> BITCOUNT bits (integer) 0 redis> SETBIT bits 0 1 # 0001 (integer) 0 redis> BITCOUNT bits (integer) 1 redis> SETBIT bits 3 1 # 1001 (integer) 0 redis> BITCOUNT bits (integer) 2
GETBIT key
offset返回位的值存储在关键的字符串值的偏移
当
offset比字符串值的长度大,或者
key不存在时,返回
0。
BITOP
量对一个或多个保存二进制位的字符串
key进行位元操作,并将结果保存到
destkey上。
当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作
0。
空的
key也被看作是包含
0的字符串序列。
GET key
返回
key所关联的字符串值。
如果
key不存在那么返回特殊值
nil。
假如
key储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值
MGET key [key ...]
返回所有(一个或多个)给定
key的值。
如果给定的
key里面,有某个
key不存在,那么这个
key返回特殊值
nil。因此,该命令永不失败。
redis> SET redis redis.com OK redis> SET mongodb mongodb.org OK redis> MGET redis mongodb 1) "redis.com" 2) "mongodb.org" redis> MGET redis mongodb mysql # 不存在的 mysql 返回 nil 1) "redis.com" 2) "mongodb.org" 3) (nil)
MSET key value [key value ...]
同时设置一个或多个
key-value对。
如果某个给定
key已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定
key都不存在的情况下进行设置操作。
MSET 是一个原子性(atomic)操作,所有给定
key都会在同一时间内被设置,某些给定
key被更新而另一些给定
key没有改变的情况,不可能发生。
MSETNX key value [key value ...]
同时设置一个或多个
key-value对,当且仅当所有给定
key都不存在。
即使只有一个给定
key已存在, MSETNX 也会拒绝执行所有给定
key的设置操作。
MSETNX 是原子性的,因此它可以用作设置多个不同
key表示不同字段(field)的唯一性逻辑对象(unique
logic object),所有字段要么全被设置,要么全不被设置。
# 对不存在的 key 进行 MSETNX redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis" (integer) 1 redis> MGET rmdbs nosql key-value-store 1) "MySQL" 2) "MongoDB" 3) "redis" # MSET 的给定 key 当中有已存在的 key redis> MSETNX rmdbs "Sqlite" language "python" # rmdbs 键已经存在,操作失败 (integer) 0 redis> EXISTS language # 因为 MSET 是原子性操作,language 没有被设置 (integer) 0 redis> GET rmdbs # rmdbs 也没有被修改 "MySQL"
SETEX key seconds value
将值
value关联到
key,并将
key的生存时间设为
seconds(以秒为单位)。
如果
key已经存在, SETEX 命令将覆写旧值。
这个命令类似于以下两个命令:
SET key value EXPIRE key seconds # 设置生存时间
不同之处是, SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在
Redis 用作缓存时,非常实用。
# 在 key 不存在时进行 SETEX redis> SETEX cache_user_id 60 10086 OK redis> GET cache_user_id # 值 "10086" redis> TTL cache_user_id # 剩余生存时间 (integer) 49 # key 已经存在时,SETEX 覆盖旧值 redis> SET cd "timeless" OK redis> SETEX cd 3000 "goodbye my love" OK redis> GET cd "goodbye my love" redis> TTL cd (integer) 2997
PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置
key的生存时间,而不是像 SETEX 命令那样,以秒为单位。
redis> PSETEX mykey 1000 "Hello" OK redis> PTTL mykey (integer) 999 redis> GET mykey "Hello"
SETBIT key offset value
对
key所储存的字符串值,设置或清除指定偏移量上的位(bit)。
位的设置或清除取决于
value参数,可以是
0也可以是
1。
当
key不存在时,自动生成一个新的字符串值。
字符串会进行伸展(grown)以确保它可以将
value保存在指定的偏移量上。当字符串值进行伸展时,空白位置以
0填充。
offset参数必须大于或等于
0,小于
2^32 (bit 映射被限制在 512 MB 之内)。
SETNX key value
将
key的值设为
value,当且仅当
key不存在。
若给定的
key已经存在,则 SETNX 不做任何动作。
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
redis> EXISTS job # job 不存在 (integer) 0 redis> SETNX job "programmer" # job 设置成功 (integer) 1 redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败 (integer) 0 redis> GET job # 没有被覆盖 "programmer"
SETRANGE key offset value
用
value参数覆写(overwrite)给定
key所储存的字符串值,从偏移量
offset开始。
不存在的
key当作空白字符串处理
# 对非空字符串进行 SETRANGE redis> SET greeting "hello world" OK redis> SETRANGE greeting 6 "Redis" (integer) 11 redis> GET greeting "hello Redis" # 对空字符串/不存在的 key 进行 SETRANGE redis> EXISTS empty_string (integer) 0 redis> SETRANGE empty_string 5 "Redis!" # 对不存在的 key 使用 SETRANGE (integer) 11 redis> GET empty_string # 空白处被"\x00"填充 "\x00\x00\x00\x00\x00Redis!"
STRLEN key
返回
key所储存的字符串值的长度。
当
key储存的不是字符串值时,返回一个错误。
当
key不存在时,返回
0
# 获取字符串的长度
redis> SET mykey "Hello world"
OK
redis> STRLEN mykey
(integer) 11
# 不存在的 key 长度为 0
redis> STRLEN nonexisting
(integer) 0
List
按插入顺序排列, push,pop,获取范围值list中存储字符串,按插入顺序排列, push,pop操作
最对2^32 -1 个元素
LPUSH命令插入一个新元素到列表头部,
RPUSH命令
插入一个新元素到列表的尾部
对一个空key执行其中某个命令时,将会创建一个新表
Redis列表主要的特性就是支持时间常数的
插入和靠近头尾部元素的删除
中间元素复杂度为 O(N)
列表可以用来当作消息传递的基元(primitive),例如,众所周知的用来创建后台任务的Resque Ruby库。
你可以使用列表做更多事,这个数据类型支持许多命令,包括像BLPOP这样的阻塞命令。请查看所有可用的列表操作命令获取更多的信息
set
数学中的集合概念,支持交、并、差!
SetZSet(Sorted Set)
每个有序集合 的成员都关联着一个评分,这个评分用于把有序集
合中的成员按最低分到最高分排列。
可以理解为一张一列存value,一列存顺序
(O(log(N)))完成添加,删除和更新元素的操作表
Hashes
Redis
Hashes是字符串字段和字符串值之间的映射,所以它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型。
支持数据类型
String
List
Set
SortedSet
Hashes
相关文章推荐
- 国内外三个不同领域巨头分享的Redis实战经验及使用场景
- How Twitter Uses Redis to Scale - 105TB RAM, 39MM QPS, 10,000+ Instances
- Redis常用的命令(六)------集合类型
- 安装redis
- 分布式中Redis实现Session终结篇
- redis的embstr编码
- redis学习篇,全面详解
- Redis set 类型 查询命令
- 一个基于redis和disque实现的轻量级异步任务执行器
- redis安装及简单操作
- win7 redis自启动 redis.bat
- 缓存雪崩,缓存穿透解决方案
- Redis中的键值对设计
- 【环境配置】Centos7 nginx+php+redis环境搭建
- java之redis篇(spring-data-redis整合)
- Redis作为缓存
- Spring 整合 Redis
- 利用redis + lua解决抢红包高并发的问题
- redis的简单使用
- Nginx + Lua + redis (一)