Redis(Remote Dictionary Server):远程字典服务,是一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value数据库,提供多种语言的API
速度快
内存存取 redis用c语言实现,执行速度快 redis采用单线程,避免多线程资源竞争的问题 redis源码精简
不仅支持简单的key-value类型的数据,还提供list,set,hash,zset等数据结构的存储
丰富的功能
提供key过期功能,用于实现缓存 提供发布订阅功能,用于消息队列 支持lua脚本功能 提供简单的事务功能 提供pipeling功能,可以多条命令一次io,减少网络开销
简单稳定
客户端语言多(支持java,python,c,c++,php等等)
持久化
RDB与AOF,数据写入磁盘,重启之后依然可以使用
主从复制
高可用与分布式
redis默认有16个数据库,客户端默认连接的是第0个,以下是进入客户端后的常见命令(redis有服务端和客户端,进入相应路径执行./redis-cli即可)
quit: 关闭连接 auth: 密码认证 ping: 检查是否连接上
select n: 选择第n个数据库 keys *: 查看此数据库的所有key flushdb: 清除当前数据库的所有key flushall: 清除所有数据库的key exist key: 确认一个key是否存在 del key: 删除一个key type key: 返回值的类型 dbsize: 返回当前数据库中的key数量 expire key n: 设定key的过期时间,单位为秒 ttl key: 获取key剩余的生存时间 clear: 清空当前命令行
String类型用于存储字节序列,包括文本、序列化对象和二进制数组
使用场景:对象缓存存储,计数器
默认情况下,单个Redis字符串最大为512MB
set key value: 设值名为key的value值 get key: 获取key中的value值 strlen key: 获取key中value值的长度 incr key: 将key中的value值增加1,若之前key为空则值为1 decr key: 将key中的value值减少1,若之前key为空则值为-1 incrby key n: 将key中的value值增加n decrby key n: 将key中的value值减少n getrange key n m: 截取key中value值中的第n-m位的值,当为0 -1时则获取全部字符串 setex key n value: 设置名为key的value值存活时间为n妙 setnx key value: 如果key不存在则设置key值为value,反之则不赋值 mset key1 value1 key2 value2: 同时设置多个键值对 mget key1 key2: 同时获取多个值 msetnx key1 value1 key2 value2: 原子性设置多个键值对,要么一起成功,要么一起失败 getset key value: 如果key值存在则更新为value值并获取到旧值,如果key不存在则返回空(nil) 可以用分隔符的方式存同类别不同参数的数值 如:set obj:1:id value1 obj:1:name value2 通过加前缀的方式来存入对象的参数,不过也可以转换成json格式作为一个字符串存入
List类型的value值为链表
使用场景:实现堆栈和队列,为后台工作系统构建队列管理
List的最大长度为2^32-1(4294967295)个元素
将链表视为队列(先进先出)FIFO lpush key value1 value2: 从左边添加1-n个value值 rpop key n: 从右边取出1-n个value值 将链表视为堆栈(先进后出)FILO lpush key value1 value2: 从左边添加1-n个value值 lpop key n: 从左边取出1-n个value值 -- lange key n m: 返回n-m区间的值,若0 -1则获取全部的值 llen key: 返回key值的长度 lmove key1 key2 left|right left|right: 从一个链表中取出并放入另一个链表中,可以定义从左还是右边取与存
Set类型的value是一个无序不重复集合
使用场景:跟踪唯一项目,表示关系,执行常见的集合运算,随机抽取
Set最大为2^32-1(4294967295)个成员
sadd key value1 value2: 添加新成员到集合中 smembers key: 查看指定集合中的成员 sismember key value: 判断value值是否在该集合中 scard key: 获取指定集合中成员个数 srem key value: 移除元素中指定的值 srandmember key n: 随机抽选出n个成员 smove key1 key2 value: 将value值从key1移动到key2 -- 集合间运算 sdiff key1 key2: 差集 key1-key2 sinter key1 key2: 交集 key1 ∩ key2 sunion key1 key2: 并集 key1 ∪ key2
Hash类型的value是一个键值对
使用场景:存储基本对象,分组计时器
hash最多存2^32-1(4294967295)个字段-值对
hset key field1 value1 field2 value2: 设置多个key-value值 hget key field1: 获取一个字段的值 hmset key field1 value1 field2 value2: 设置多个key-value值 hmget key field1 field2: 获取多个字段值 hdel key field1: 删除指定key中字段-值对 hlen key: 获取key值的字段-值对个数 hexists key field1: 判断key值中的指定字段是否存在 hkeys key: 只获取所有字段 hvals key: 只获取所有值 hgetall key: 获取所有字段-值对 -- hincrby key filed1 n: 指定给key中的字段值加n
Zset类型的value是一个有序(有权重score)不重复的集合
使用场景:排行榜,速率限制器
排行榜 zadd key1 score member1 :添加一个权重为score的用户在key中,如果用户已存在则更新权重score zrangebyscore key -inf +inf :显示全部用户,从小到大排序 zrevrange key 0 -1: 显示全部用户,从大到小排序 zrange key 0 2 rev withscore: 取前三名用户 从大到小排 带分数 zrank key member: 返回用户的排名,从小到大排序 zrevrank key member: 返回用户的排名,从大到小排序 -- zrem key member: 删除key中的指定用户 zcard key: 获取key中的用户总数 zcount key n m: 获取指定区间的用户数量