redis 是基于 C 语言开发的一个开源非关系型内存数据库(key/value 型数据库)
特点
- 反对数据长久化
- 存储构造反对多种数据结构 String list Set ZSet Hash
- 反对数据备份 master-slave 模式数据备份
劣势
- 高性能
- 丰盛的数据结构
- 原子性,反对事务
- 丰盛的个性 (publish/subscribe, 告诉, key 过期)
利用
缓存,数据库,消息中间件等
装置并启动
如下图所示
客户端
redis-cli
应用 redis-cli -h 查看帮忙信息
参考网站
- https://redis.io/
- http://redis.cn/
数据结构 -Strings 字符串类型
redis 中最根本的数据类型,一个 key 对应一个 value
二进制平安 能够蕴含 数字 字符串 图片 序列化对象等
string 类型能够用来存储缓存,session, 计数器 (redis 单线程模式,一个命令执行完 后才会执行下一个命令) 等
常用命令 set get del
127.0.0.1:6379> set name 123
OK
127.0.0.1:6379> get name
"123"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
INCR(递增 1) INCRBY(递增一个范畴) DECR(递加 1) DECRBY(递加一个范畴)
127.0.0.1:6379> get counter
(nil)
127.0.0.1:6379> INCR conter
(integer) 1
127.0.0.1:6379> INCR conter
(integer) 2
127.0.0.1:6379> INCR conter
(integer) 3
127.0.0.1:6379> INCR conter
(integer) 4
127.0.0.1:6379> get conter
"4"
127.0.0.1:6379> INCRBY conter 10
(integer) 14
127.0.0.1:6379> get counter
(nil)
127.0.0.1:6379> get couter
(nil)
127.0.0.1:6379> get conter
"14"
127.0.0.1:6379> DECR conter
(integer) 13
127.0.0.1:6379> DECRBY Conter 3
(integer) -3
127.0.0.1:6379> DECRBY conter 3
(integer) 10
ps:命令不辨别大小写,key 辨别大小写
数据结构 -Lists 列表类型
双向链表,左右都能够插入和 删除数据
一个列表最多能够蕴含 2^32- 1 个元素(约 40 亿个元素)
常用命令:lpush+lpop(栈 stack)
127.0.0.1:6379> lpush mylist php
(integer) 1
127.0.0.1:6379> lpush mylist java
(integer) 2
127.0.0.1:6379> lpush mylist golang
(integer) 3
127.0.0.1:6379> LRANGE 0 10
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> LRANGE mylist 0 10
1) "golang"
2) "java"
3) "php"
127.0.0.1:6379> lpop mylist
"golang"
127.0.0.1:6379> lpop mylist
"java"
127.0.0.1:6379> lpop mylist
"php"
127.0.0.1:6379> lpop mylist
(nil)
常用命令:lpush+rpop(队列 queue)
127.0.0.1:6379> lpush mylist php java python golang
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 10
1) "golang"
2) "python"
3) "java"
4) "php"
127.0.0.1:6379> RPOP mylist
"php"
127.0.0.1:6379> RPOP mylist
"java"
数据结构 -Sets 汇合类型
保留多个字符串元素。汇合为无序的,不能通过索引下标拜访。汇合不能有反复元素。在 redis 中,汇合能够很不便的进行交加,并集,差集等操作。
利用场景:点赞数,珍藏书统计。给用户打标签(一个标签一个汇合)而后能够利用汇合的关系剖析用户行为
汇合常见命令(次要以 s 结尾)
- sadd(向汇合中插入元素)
- smembers(返回汇合中所有成员数)
- sismember(判断是否是汇合中的成员)
- scard(返回汇合中元素的个数)
127.0.0.1:6379> sadd myset hao hao1 xiaohao hao
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "xiaohao"
2) "hao"
3) "hao1"
# 判断 hao 是否是汇合 myset 中的成员
127.0.0.1:6379> SISMEMBER myset hao
(integer) 1
127.0.0.1:6379> SISMEMBER myset hao1
(integer) 1
127.0.0.1:6379> SISMEMBER myset hao2
(integer) 0
# 返回汇合中元素的个数
127.0.0.1:6379> SCARD myset
(integer) 3
# 返回不存在的元素个数则返回 0
127.0.0.1:6379> SCARD myset1
(integer) 0
数据结构 -Sorted sets 有序汇合类型
有序汇合和汇合相似,都是不蕴含雷同字符串的合集。不同的是,有序汇合中的元素都关联一个评分,通过这个评分能够对汇合中的元素进行排序(元素不能反复,然而分数 能够反复)
应用有序汇合,你能够十分快地(O(log(N)))实现 增加 , 删除 和更新元素 的操作。因为元素是在插入时就排好序的,所以很快地通过评分 (score) 或者 位次 (position) 取得一个范畴的元素
利用场景:排行榜
常用命令(有序汇合中的命令通常以 z 结尾)
# 增加有序汇合元素
127.0.0.1:6379> zadd scoreset 100 Amy 90 Bob
(integer) 2
127.0.0.1:6379> zadd scoreset 99 Zhangsan 91 Lisi
(integer) 2
# 获取有序汇合元素
127.0.0.1:6379> zcard scoreset
(integer) 4
# 获取区间范畴元素个数
127.0.0.1:6379> zcount scoreset 95 100
(integer) 2
# 获取某一个元素排名
127.0.0.1:6379> zrevrank scoreset Lisi
(integer) 2
# 获取排名区间范畴
127.0.0.1:6379> zrevrange scoreset 0 10
1) "Amy"
2) "Zhangsan"
3) "Lisi"
4) "Bob"
数据结构 -Hash 哈希
Mapmap 类型, 指值的自身又是一种键值对类型
利用场景: 用来缓存一些对象信息, 入用户信息, 商品信息, 对象信息等 =, 另外就是购物车等场景中应用.
哈希命令都是以 h 结尾
127.0.0.1:6379> HSET user name1 hao
(integer) 1
127.0.0.1:6379> HSET user email aaaa@qq.com
(integer) 1
127.0.0.1:6379> HSET user age 18
(integer) 1
127.0.0.1:6379> HGETALL user
1) "name1"
2) "hao"
3) "email"
4) "aaaa@qq.com"
5) "age"
6) "18"
127.0.0.1:6379> HGET user age
"18"