Reids的特点
- 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的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis基本数据类型
1.redis支持五种基本数据类型:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sort set:有序集合)
String(字符串)
string 是 redis 最基本的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
基本操作
- 添加/修改数据
set key value
- 获取数据
get key
- 删除数据
del key
实例
上面实例使用到了Redis的set和get命令,键为name,对应的值为tom
我们还可以将用户主键和属性名作为key,例如:
或者也可以使用json的格式来存储,例如:
扩展操作
- 设置数值数据增加指定范围的值
incr key 一次增加1
incrby key increment 增加给定数值
incrbyfloat key increment 增加float值
- 设置数值数据减少指定范围的值
dcer key 一次减少1
decr key increment 减少给定值
- 设置数据具有指定周期(设置多久存活,时间到了就删除)
setex key seconds value 秒
psetex key milliseconds value 毫秒
实例
如果类型不同则会报错
10秒后自动清除,注意:如果设置消除时间后再一次set name,则时间会消失
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
底层使用哈希结构实现数据存储
Hash存储的结构优化:
- 如过filed数量较少,存储结构优化为类数组结构
- 如过filed数量较多,存储结构使用HashMap结构
基本操作
- 添加/修改数据
hset key filed value
- 获取数据
hget key filed
hgetall key
- 删除数据
hdel key filed1 [filed2]
批量操作
- 添加/修改多个数据
hmset key field1 value field2 value...
- 获取多个数据
hmget key field1 field2 ...
- 获取哈希表中字段的数量
hlen key
- 获取哈希表中是否存在指定的字段
hexists key field
实例
如果存在指定字段则返回1,否则返回0
扩展操作
- 获取哈希表中所有的字段名或字段值
hkeys key
hvals key
- 设置指定字段的数值数据增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
实例
获取表中所有key或者所有value
List(列表)
- Redis列表是简单的字符串列表,按照插入顺序排序(查询效率慢,内部为链表)。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
- 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
基本操作
- 添加/修改数据
lpush key value1 [value2]... 从左边添加
rpush key value1 [value2]... 从右边添加
- 获取数据
lrange key start stop
lindex key index
llen key
- 获取并移除数据
lpop key 从左边获取并移除
rpop key 从右边获取并移除
实例
使用list的时候需要注意插入的顺序
如果想一次性查询所有,可以以相反方向查询
获取长度或者使用索引查询
结合lpush,rpush和lpop,rpop可以实现栈(先进后出)
扩展操作
- 规定时间内获取并移除数据(以秒为单位)
blpop key1 [key2]... timeout
brpop key1 [key2]... timeout
- 移除指定数据
lrem key count value count:移除多少位 value:移除的value
实例
b代表阻塞,当使用blpop或brpop时,如果list中存在数据,则立即取出,如果list中没有任何东西,那么他会等待设置的秒数,在此时间内如果list中有新东西进入,则他会获取里面的东西,
他还可以同时等待多个list,从a,b,c依次获取数据,哪个先有数据则取哪个
删除指定的value
set(集合)
- Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
- Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
- 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
它相当于是使用了hash存储,但是将field当成了value使用,而value只能为空
Hash的存储效率很高,并且这样设计可以使用到field不能重复的特点,重复则覆盖,这样既继承了存储效率高的特点,也继承了不能重复的特点
基本操作
- 添加数据
sadd key member1 [member2]
- 获取全部数据
smembers key
- 删除数据
srem key member1 [member2]
- 获取集合数据总量
scard key
- 判断集合中是否包含指定数据
sismember key member
实例
扩展操作
- 随机获取集合中指定数据量的数据
srandmember key [count]
- 随机获取集合中某个数据并将该数据移出集合
spop key
- 求两个集合的交,并,差集
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
- 求两个集合的交,并,差集,并存储到指定的集合中
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
- 将指定数据从原始集合中移动到目标集合中
smove source destination member
实例
取出后不删除
取出后删除
交,并差集实例:
需注意,差集存在顺序关系
sorted_set(有序集合)
- Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
- 有序集合的成员是唯一的,但分数(score)却可以重复。通过score来进行排序
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
基本操作
- 添加数据
zadd key score1 member1 [score2 member2]
- 获取全部数据
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
- 删除数据
zrem key member [member..]
- 按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
zrevrangebyscore key max min [WITHSCORES]
- 条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max
- 获取集合数据总量
zcard key
zcount key min max
- 集合交,并操作
zinterstore destination numkeys key [key...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
zunionstore destination numkeys key [key...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
实例
以学生成绩排名,虽然存储在score上,但是不要把它认为是数据
withscores表示查询结果连同score一起展示
根据限定范围的score查询
使用limit的情况,offset:偏移量,count:数量
获取sorted_set数量
求交集时它会先将找到共有的数据,然后再将其score通过AGGREGATE去处理,默认相加
扩展操作
- 获取数据对应的索引(排名)
zrank key member
zrevrank key member
- score值获取与修改
zscore key member
zincrby key increment member
实例
可用于一些排行榜之类
Redis通用命令
key通用指令
key基本操作
- 删除指定key
del key
- 获取key是否存在
exists key
- 获取key的类型
type key
key扩展操作
时效性控制
- 为指定的key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
- 获取key的有效时间
ttl key
pttl key
- 切换key从时效性转换为永久性
persist key
实例
如果一个key没有设置有效时间,则ttl返回-1,如果一个key时间有效时间过了则返回-2,如果设置了有效期,则返回有效时长
查询模式
- 查询key
keys pattern
查询模式规则
- *匹配任意数量任意符号
- ?匹配一个任意字符
- []匹配一个指定符号
实例
keys *查询所有的key
key其他操作
- 为key改名
rename key newkey newkey存在会覆盖
renamenx key newkey newkey存在会报错
- 对多有key排序
sort
- 其他key通用操作
help @generic
实例
指令help
sort是排序key里的元素,不会修改原有数据
数据库通用指令
- reids为每个服务提供有16个数据库,编号从1-15
- 没个数据库之间的数据相互独立
DB基本操作
-切换数据库
select index
- 其他操作
quit
ping
echo message
实例
ping有响应则为接通状态
DB相关操作
- 数据移动
move key db
- 数据清除(删除指令慎用)
dbsize 获取当前数据库key数量
flushdb 删除当前库数据
flushall 删除所有库数据
实例
慎用!慎用!慎用!