redis是什么
redis是一个Key-Value等多种数据结构的存储系统,可用于缓存,事件订阅,发布,高速队列等场景
该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。
redis的应用场景有哪些
1,会话缓存(最常用)
2,消息队列,比如支付3,活动排行榜或计数
4,发布,订阅消息(消息通知)
5,商品列表,评论列表等
redis数据类型
一共支持5种数据类型 String(字符串) , hash(哈希) ,list(列表) set(集合) zset(sorted set有序集合)。
(1)String(字符串)
他是最基本类型 一个键对应一个值 需要注意的是一个键值最大存储为512M
set key "he"
get key
"he"
getset key "nihao"
"he"
mset key1 "ni" key2 "nihao" key3 "hello"
get key1
"ni"
get key2
"nihao"
(2)hash(哈希)
hash是一个键值对集合,是一个String类型的field和value的映射表,适用于存储对象
hset redishash 1 "001"
(integer) 1
hget redishash 1
"001"
hmset redishash 1 "001" 2 "002"
hget redishash 1
"001"
hget redishsh 2
"002"
hmget redishash 1 2
"001"
"002"
(3)表(列表)
是redis最简单的字符串列表,他是按插入顺序排序
lpush word hi
(integer) 1
lpush word hello
(integer) 2
rpush word world
(integer) 3
lrange word 0 2
"hello"
"hi"
"world"
llen word
(integer) 3
(4)组 (集合)
是字符串类型的无序集合,也不可重复 !! 无序 不可重复
sadd redis redisset
(integer) 1
sadd redis redisset1
(integer) 2
sadd redis redisset2
(integer) 3
smember redis
"redisset1"
"redisset"
"redisset2"
sadd redis redisset2
(integer) 0
smembers redis
"redisset1"
"redisset"
"redisset2"
smembers redis
"redisset1"
"redisset3"
"redisset"
"redisset2"
srem redis redisset
(integer) 1
smember redis
"redisset1"
"redisset3"
"redisset2"
(5)zset (sorted set 有序集合)
是String 类型的有序集合,也不可重复
有序集合中的每个元素都需要指定一个分数 根据分数进行升序降序 如果多个元素有相同的分数,则按照字典顺序升序排序 sorted set 因此非常适合做排行排名
zadd nosql 0 001
(integer) 1
zadd nosql 0 002
(integer) 1
zadd nosql 0 003
(integer) 1
zcount nosql 0 0
(integer) 3
zcount nosql 0 3
(integer) 3
zrem nosql 002
(integer) 1
zcount nosql 0 3
(integer) 2
zscore nosql 003
"0"
zrangebyscore nosql 0 10
"001"
"003"
zadd nosql 1 003
(integer) 0
zadd nosql 1 004
(integer) 1
zangebyscore nosql 0 10
"001"
"003"
"004"
zadd nosql 3 005
(integer) 1
zadd nosql 2 006
(integer) 1
zangebyscore nosql 0 10
"001"
"002"
"003"
"006"
"005"
5,redis的服务相关的命令
slect#选择数据库(数据库编号0-15)
退出#退出连接
信息#获得服务的信息与统计
monitor#实时监控
config get#获得服务配置
flushdb#删除当前选择的数据库中的key
flushall#删除所有数据库中的键
6,redis的发布与订阅
redis的发布与订阅(发布/订阅)是它的一种消息通信模式,一方发送信息,一方接收信息。
下图是三个客户端同时订阅同一个频道
下图是有新信息发送给频道1时,就会将消息发送给订阅它的三个客户端
7,redis的持久化
redis持久有两种方式:快照(快照),仅附加文件(AOF)
快照(快照)
1,将存储在内存的数据以快照的方式写入二进制文件中,如默认dump.rdb中
2,保存900 1
#900秒内如果超过1个Key被修改,则启动快照保存
3,保存300 10
#300秒内如果超过10个Key被修改,则启动快照保存
4,保存60 10000
#60秒内如果超过10000个重点被修改,则启动快照保存
仅附加文件(AOF)
1,使用AOF持久时,服务会将每个收到的写命令通过写函数追加到文件中(appendonly.aof)
2,AOF持久化存储方式参数说明
appendonly yes
#开启AOF持久化存储方式
appendfsync always
#收到写命令后就立即写入磁盘,效率最差,效果最好
appendfsync everysec
#每秒写入磁盘一次,效率与效果居中
appendfsync no
#完全依赖操作系统,效率最佳,效果没法保证
8,redis的性能测试
自带相关测试工具
实际测试同时执行100万的请求