Redis的起源
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便 对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。
VMware公司从2010年开始赞助Redis的开发, Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求。
Redis的安装方式
1. Docker安装方式:
#拉取redis镜像
> docker pull redis
#运行 redis 容器将容器的6379端口映射到主机的6379端口
> docker run --name myredis -d -p 6379:6379 redis
#执行容器中的redis-cli 可以直接使用命令操作redis
>docker exec -it myredis redis-cli
2.Git 源码安装方式
#下载源码
> git clone --branch 3.2 --depth 1 git@githup.com:anthirez/redis.git
cd redis
#编译
>make
>cd src
#运行服务器,修改配置文件redis.conf daemonize表示在后台运行
>./redis-server --dameomize yes
#使用客户端连接
>./redis-cli
3. 直接安装方式
#mac
>brew install redis
#ubuntu
>apt-get install redis
#redhat
>yum install redis
#运行客户端
>./redis-cli
常用数据结构及命令
查看redis运行时参数命令
info:查看redis服务运行信息,分为9大块,每个块都有非常多的参数,这9块分别为:
Server 服务器运行的环境参数
Clients 客户端相关信息
Memory 服务器运行内存统计数据
Persistence 持久化信息
Stats 通用统计数据
Replicatio 主从复制相关信息
CPU CPU使用情况
Cluster 集群信息
KeySpace 键值对统计数量信息
常用数据结构
1.String类型
基础数据类型。在redis中所有的值都是字符串。在redis中命令不区分大小写。
常用命令
命令 | 作用 |
---|---|
SET key value | 存入字符串键值对 |
MSET key value [key value …] | 批量存储字符串键值对 |
SETNX key value | 存入一个不存在的字符串键值对 |
GET key | 获取字符串键值 |
MGET key [key …] | 批量获取字符串键值 |
DEL key [key …] | 删除一个键 |
EXPIRE key seconds | 设置一个键的过期时间(秒) |
INCR key | 将key中存储的数字加1 |
DECR key | 将key中存储的数字减1 |
INCRBY key increment | 将key所存储的值加increment |
DECRBY key decrement | 将keu所存储的值减decrement |
2.Hash类型
常用命令
命令 | 作用 |
---|---|
HSET key field value | 存储一个哈希表key的键值 |
HSETNX key field value | 存出一个不存在的哈希表key的键值 |
HMSET key field value [field value …] | 在一个哈希表key中存储多个键值对 |
HGET key field | 获取哈希表key对应的field键值 |
HLEN key | 返回哈希表key中field的数量 |
HINCRBY key field increment | 为哈希表key 中field键的值加上增量increment |
优点:
- 同类数据归类整合存储,方便数据管理
- 相比Stirng操作消耗与CPU更小
- 相比String存储更节省空间
缺点:
- 过期功能不能使用在field上,只能用在key上
- Redis集群架构上不适合大规模使用
List类型
常用命令
命令 | 作用 |
---|---|
LPUSH key value [value …] | 将一个或多个value值插入到key列表的表头(最左边) |
RPUSH key value [value …] | 将一个或多个value值插入到key列表的表尾(最右边) |
LPOP key | 移除并返回key列表的头元素 |
RPOP key | 移除并返回key列表的尾元素 |
LRANGE key start stop | 返回列表key中指定区间内的元素,区间以偏移量start和stop指定 |
BLPOP key [key …] timeout | 从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待 |
BRPOP key [key …] timeout | 从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待 |
Set类型
集合中的元素是无序的并且没有重复的
常用命令
命令 | 作用 |
---|---|
SADD key member [member …] | 往集合key中存入元素,元素存在则忽略,若key不存在则新建 |
SMEMBERS key | 获取集合key中所有元素 |
SCARD key | 获取集合key的元素个数 |
SISMEMBER key member | 判断member元素是否存在于集合key中 |
SRANDMEMBER key [count] | 从集合key中选出count个元素,元素不从key中删除 |
SPOP key [count] | 从集合key中选出count个元素,元素从key中删除 |
SINTER key [key …] | 交集运算 |
SINTERSTORE destination key [key …] | 将交集结果存入新集合destination中 |
SUNION key [key …] | 并集运算 |
SUNIONSTORE destination key [key …] | 将并集结果存入新集合destination中 |
SDIFF key [key …] | 差集运算 |
SDIFFSTORE destination key [key …] | 将差集结果存入新集合destination中 |
sortedSet类型(zset)
集合中的元素都是有序的,并且此集合中每个元素都有一个分数,可以根据分数升序排列
常用命令
命令 | 作用 |
---|---|
ZADD key score member [[score member]…] | 往有序集合key中加入带分值元素 |
ZREM key member [member …] | 从有序集合key中删除元素 |
ZSCORE key member | 返回有序集合key中元素member的分值 |
ZINCRBY key increment member | 为有序集合key中元素member的分值加上increment |
ZUNIONSTORE destkey numkeys key [key …] | 并集计算 |
ZINTERSTORE destkey numkeys key [key …] | 交集计算 |