redis、mongdb都是非关系型数据库,一般用于key-value存储,文档型的、列存储、图型数据库、xml数据库。
1、redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
特点:1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3、Redis支持数据的备份,即master-slave模式的数据备份。
优势:
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
2、redis的数据类型:
字符串(String)
哈希(hash):是一个string类型的field和value的映射表,hash特别适合存储对象
列表(list):简单的字符串列表。按照插入顺序排序。可以往列表的头部或尾部添加元素
集合(set):set是string类型的无序集合,集合的元素是唯一的,最多为2的32次方个
有序集合(zset):也是string类型元素的集合,且不允许数据重复
3、redis键的通用操作:
1)key:
key的查询:key pattern,
pattern 支持glob风格通配符格式
? 匹配一个字符
* 匹配任意个(包括0个)字符
[] 匹配括号间的任一字符,可以使用"-"符号表示一个范围,如a[b-d]可以匹配 ab ac ad
\x 匹配字符x,用于转移符号
如:
keys * 查询当前库下所有的键
keys m* 查询以m开头的键
key的删除:del key [key ...] 删除成功返回1,没有该键返回0
判断键是否存在: exists 键名 删除成功返回1,没有该键返回0
获取键值的数据类型
type key
2)redis中设置key的生命周期,默认是1.不会超时(永久保存)
a、设置超时:
秒:expire 键名 超时的秒数n n秒后该键会被清空
查看剩余时间 → ttl 键名 该键属于永久型时,返回 -1,不然返回-2
毫秒:pexpire 键名 超时的毫秒数n
b、永久存储
persist 键 →删除键的超时时间
3)随机获取一个键
randomkey
4)键的重命名
rename 键的旧名称 键的新名称 →重命名键,若新建名称已经存在则会覆盖
renamenx 旧键 新键 →如果键不存在则重命名,如果新键名称已经存在则不会重命名
4、字符串类型
可以存储任何形式的字符串,包括二进制数据。
1)赋值与取值
set key value
get key
2)递增数字,仅限存储的字符串是整数形式时
incr key
3)增加指定的整数
incrby key increment
减少指定的整数
decr key [decrement]
增加指定浮点数
incrbyfloat key increment
向尾部追加值,如果键不存在,则新建键并设值
append key value
获取字符串长度,键不存在时返回0
strlen key
同时获取或设置多个键值
mget key [key ...]
mset key value [key value ...]
5、位操作:
获得一个字符串类型键指定位置的二进制位的值(0或1),索引从offset开始
getbit key offset
设置字符串类型键指定位置的二进制位的值
setbit key offset value
获取字符串类型键中值(start-end)是1的二进制个数
bitcount key [start] [end]
bitop operation destkey key [key ...]
6、散列类型
适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,则字段值则存储属性值
给对象某个属性赋值
hset key fieId value
取对象的某个属性
hget key fieId
hset key fieid value [fieid value ...]
hget key fieid [fieid ...]
hgetall key
只获取这个对象的字段名或字段值
hkeys key
hvals key
7、列表类型
存储一个有序的字符串列表(内部是使用双向链表实现的)
向列表两端增加元素,返回列表的长度
lpush key value [value ...]
rpush key value [value ...]
从列表两端弹出元素。返回被移除的元素
lpop key
rpop key
获取列表汇总元素的个数
llen key
获取列表片段
lrange key start stop
删除列表中指定的值
删除列表前count个值为value的元素,返回被删除的元素个数
lrem key count value
注意:
当count>0 时,从列表左边开始删除前count个值为value的元素
当count<0 时,从列表右边开始删除前-count个值为value的元素
当count=0 时,会删除所有值为value的元素
获得或设置指定索引的元素值(最右边的元素索引是 -1)
lindex key index
lset key index value
只保留列表指定片段
ltrim key start end
向列表插入元素
linsert key before|after pivot(键值) value
将元素从一个列表转到另一个列表
rpoplpush source destination
8、集合类型
增加或删除元素
sadd key member [member ...]
srem key member [member ...]
获得集合中所有的元素
smemers key
判断元素是否在集合中
sismemer key member
集合间的运算
对多个集合执行差集运算:
sdiff key [key ...]
对多个集合执行交集运算
sinter key [key ...]
对多个集合执行并集运算
sunion key [key ...]
获取集合中元素的个数
scard key
进行集合运算并将结果存储
sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]
随机获取集合中的元素
count 为正数时,返回count 个不重复的元素
count 为负数时,返回-count个元素,元素可能相同
srandmember key [count]
有序集合类型
向有序集合中加入一个元素和该元素的分数(整数、双精度浮点数),如果该元素已经存在则会用新的分数替换原有的分数
zadd key score member [score member ...]
获得元素的分数
zscore key member
获取排名在某个范围的元素列表
zrange key start stop [withscores]
zrevrange key start stop [withscores]
zraneg 命令会返回按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包括两端的元素),与 lrange 命令十分相似。如果需要分数的话,需要追加 withscores
获得指定分数范围的元素,不包活端点,加上 (
zrangebyscore key min max [withscores] [limit offset count]
增加某个元素的分数
zincrby key increment member
获得集合中元素的数量
zcard key
获取指定分数范围内的元素个数
zcount key min max
删除一个或多个元素
zrem key member [member ...]
按照排名范围删除元素
zremrangebyrank key start stop
获得元素的排名
zrank key member
zrevrank key member
计算有序集合的交集,并将结果存储在 destination 键中,返回值为 destination 键中的元素个数
zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]
aggregate 是 sum 时(也是默认值),destination 键中的元素的分数是每个参与计算的集合中该元素分数的和
aggregate 是 min 时,destination 键中的元素的分数是每个参与计算的集合中该元素分数的最小值
aggregate 是 max 时,destination 键中的元素的分数是每个参与计算的集合中该元素分数的最小值
zinterstore 命令通过 weights 参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重