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 参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重