什么是Redis,通常咱们都会这样介绍:redis是一个内存型非关系型数据库。这样redis的一个常见的介绍,那么什么是内存型,非关系型呢?mysql
官方是这样介绍的:"Redis is an open source (BSD licensed),in-memory data structure store, used as a database,cache and message broker."redis
翻译一下就是:Redis是一个开源的、基于内存的数据结构存储器,能够用做数据库、缓存和消息中间件。sql
从以上的解释中,能够总结出来数据库
Redis的数据基于内存存储数据,支持多种数据结构,这就解释了内存型。json
将数据存储在内存中缓存
优势bash
查询效率很是高 ,内存的速率远高于硬盘网络
缺点数据结构
服务关闭,内存中的数据会丢失,redis怎么解决呢?多线程
redis经过持久化机制会将内存中的数据持久化到磁盘中,这就是咱们说redis是数据库的缘由了,后面会详细的介绍 redis的持久化机制。
非关系型数据库
非关系型数据库指的是redis的存储结构,经过key-value的结构存储数据(能够简单的认为是map同样的结构)。
mysql oracle传统的经过表进行数据存储的数据库,称之为关系型数据库
Redis能够用做,数据库,缓存等
安装gcc
yum install gcc
解释:redis是用c语言编写,须要先使用gcc编译redis
复制代码
上传 解压redis安装包
tar -zxvf redis-3.0.7.tar.gz
复制代码
编译
命令:make
复制代码
注意:在redis的目录中执行make命令
安装成功的标志
启动redis服务端
进入redis安装目录的src目录
使用./redis-server ../redis.conf 启动redis数据库
复制代码
启动redis命令行客户端
新Linux操做窗口中 执行 ./redis-cli
该窗口就是redis的命令行窗口 能够执行redis中的命令
复制代码
简单的测试redis存取命令
redis的数据存储结构:redis自己采用key-value的方式存储数据
实际上Redis并没有直接使用这些数据结构来实现
key-value
数据库,而是基于这些数据结构建立了一个对象系统,redis数据库里面的每一个键值对都是由对象组成的,其中
- 数据库的键老是一个字符串对象
- 数据库键对应的值能够是字符串对象,列表对象,哈希对象,集合对象,有序集合对象这五种对象中的一个
也就是说:当咱们执行了
set username zhangsan
命令以后,在redis内部会生成两个字符串对象,分别作 key 和 value 存储数据
在命令行客户端中写入命令能够用来操做redis,常见的命令以下:
Redis 命令参考:doc.redisfans.com/
try Redis(不用安装Redis便可体验Redis命令):try.redis.io/
value的数据结构不一样,对应支持的命令不一样
命令 | 示例 | 做用 |
---|---|---|
set | set k v | 添加一个key-value |
get | get k | 根据key获取value |
exists | exists k | 判断key是否存在 |
del | del k | 根据key删除对应数据该命令适用于其余4个数据结构 |
mset | mset k1 v1 k2 v2 | 一次性设置多个key-value |
mget | mget k1 k2 | 一次性根据多个key获取多个value |
incr | incr k1 | 对该key对应的value(数字),进行加1 |
decr | decr k1 | 对该key对应的value(数字),进行减1 |
应用场景:缓存查询结果(json或者序列化) 用户访问记录 例如:经过记录ip-访问次数来显示ip的访问 统计粉丝数、点击次数
命令 | 示例 | 做用 |
---|---|---|
sadd | sadd k v | 向key对应的set集合中添加一个元素 |
smembers | smembers k | 获取set集合中全部元素 |
scard | scard k | 获取set集合中元素个数 |
spop | spop k | 删除set集合中任意一个元素 |
srem | srem k v | 删除set集合中指定元素 |
sdiff | sdiff k1 k2 | 返回k1对应集合中去重和k2对应集合重复部分 |
sinter | sinter k1 k2 | 获取k1对应set集合和k2对应set集合交集 |
sunion | sunion k1 k2 | 获取k1对应set集合和k2对应set集合的并集 |
应用场景:查找共同好友
命令 | 示例 | 做用 |
---|---|---|
zadd | zadd k 分数 v | 在key对应的有序集合中添加一个新元素 |
zrevrange | zrevrange k start stop | 获取下标区间的元素,按照分数正向排名 |
zcard | zcard k | 返回key对应的zset集合元素个数 |
zrem | zrem k v | 删除key对应集合中value元素 |
zrevrank | zrevrank k v | 获取value在key对应集合中排名(从0开始) |
zscore | zscore k v | 获取value在key对应的zset集合中的分数 |
zincrby | zincrby k n v | 对key对应的set集合中的v进行加分操做 |
应用场景:排行榜
命令 | 示例 | 做用 |
---|---|---|
hset | hset k k1 v1 | 向hash中添加一个k-v |
hget | hget k k1 | 根据k获取hash,在根据k1从hash中获取v |
hgetall | hgetall k | 获取k对应的hash中全部的k-v |
hdel | hdel k k1 | 删除k对应的hash中的k1数据 |
hkeys | hkeys k | 获取k对应hash中全部key |
hvals | hvals k | 获取k对应hash中全部的value |
hexists | hexists k k1 | 判断hash中是否存在对应的k |
应用场景:存储对象,便于修改 分区缓存
命令 | 示例 | 做用 |
---|---|---|
rpush | rpush k v | 从list集合右侧添加一个元素 |
rpop | rpop | 删除list集合右侧的元素 |
lpush | lpush k v | 从list集合左侧添加一个元素 |
lpop | lpop | 删除list集合左侧的元素 |
llen | llen k | 获取list集合长度 |
lrange | lrange k start stop | 获取liist集合下标中范围的元素 |
lindex | lindex k 下标 | 获取list集合中某个下标的元素 |
应用场景:关注列表、消息队列
命令 | 示例 | 做用 |
---|---|---|
seletct database的编号 | select 0 | redis默认16个库选择指定库操做,默认从0开始 |
flushdb | flushdb | 清空当前操做的库 |
flushall | flushall | 清空redis全部库 |
expire key | expire key | 设置key存活时间的秒 |
ttl key | ttl key | 查看key对应的数据的存活时间 |
pexpire key | pexpire key | 存活时间的毫秒 |
pttl key | pttl key | 查看key对应的数据的存活时间,毫秒单位 |
keys * | keys * | 打印全部key |