redis是基于C语言开发的一个开源非关系型内存数据库(key/value型数据库)

特点

  • 支持数据持久化
  • 存储结构支持多种数据结构 String list Set ZSet Hash
  • 支持数据备份 master-slave 模式数据备份

优势

  • 高性能
  • 丰富的数据结构
  • 原子性,支持事务
  • 丰富的特性 (publish/subscribe, 通知, key 过期)

应用

缓存,数据库,消息中间件等

安装并启动

如下图所示
安装.png

客户端

redis-cli

使用 redis-cli -h 查看帮助信息

参考网站


数据结构-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

参考:http://redis.cn/commands.html...

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"

参考:http://redis.cn/commands.html...

数据结构-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

参考:http://redis.cn/commands.html...

数据结构-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"

参考:http://redis.cn/commands.html...

数据结构-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"     

参考:http://redis.cn/commands.html...


tim_xiao
144 声望2 粉丝

后端程序员