1.Redis简介
NoSQL概念:Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。目的是应对基于海量用户和海量数据前提下的数据处理问题。
特征
可扩容,可伸缩
大数据量下高性能
灵活的数据模型
高可用
常见NoSQL数据库:Redis、memcache、HBase、MongoDB
1.2概念
Redis(Remote Dictionary Server)是用C语言开发的一个开源的高性能键值对数据库。
1.3特征
数据间没有必然的关联关系
内部采用单线程机制进行工作
高性能
多数据类型支持
持久化支持
2.Redis下载与安装
win版[Redis下载][https://github.com/MSOpenTech/redis/tags]
[Redis安装教程][https://www.redis.com.cn/redis-installation.html]
3.Redis快速上手
信息添加、查询
#添加语法格式:set key value
set name zhangsan
#查询语法格式:get key
get name
清除信息
clear
4.Redis存储数据类型
string | hash | list | set | sorted_sort | (Redis数据类型) |
String | HashMap | LinkedList | HashSet | TreeSet |
Redis数据存储格式
redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储
数据类型指的是存储的数据的类型,也就是 value 的类型,key 永远都是字符串数据类型
string
基本操作
单条数据
#set key value
set a 1
多条数据
#set key value key value
set a 1 b 2
获取数据
#get key
get a
删除数据
#del key
del a
获取字符个数(字符串长度)
#strlen key
strlen a
追加信息(有则追加,无则创建)
#append key value
append c 3
扩展操作
设置数值数据增减
#增
#incr key
#incrby key increment
#increbyfloat key increment
#减
#decr key
#decrby key increment
指定数据生命周期
#setex key seconds value
#psetex key milliseconds value
hash
基本操作
单条数据
#hset key field value
hset 001 g01 20
多条数据
#hset key field1 value1 field2 value2
hset 001 g01 10 g02 20
查看单条数据
#hget key field
hget 001 g01
查看多条数据
#hget key field1 field2
hget 001 g01 g02
查看全部数据
#hgetall key
hgetall 001
删除数据
#del key
del 001
查看字段(field)数量
#hlen key
hlen 001
判断字段是否存在
#hexists key field
hexists key g01 #返回1
扩展操作
查看所有的字段名
#hkeys key
hkeys 001
查看所有的字段值
#hvals key
hvals 001
list
基本操作
添加/修改数据
#lpush key value1 [value2...]
#rpush key value1 [value2...]
查看数据
#lrange key start stop
#lindex key index
#llen key
获取并移除数据
#lpop key
#rpop key
指定时间获取并移除数据
#blpop key1 [key2] timeout
#brpop key1 [key2] timeout
#brpoplpush source destination timeout
5.重难点
5.1.string作为数值操作
string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。(9223372036854775807)(java中long型数据最大值,Long.MAX_VALUE)
5.2.数据操作不成功的反馈与数据正常操作之间的差异
string 类型数据操作的注意事项
表示运行结果是否成功
(integer) 0 → false 失败
(integer) 1 → true 成功
表示运行结果值
(integer) 3 → 3 3个
(integer) 1 → 1 1个
数据未获取到 (nil)等同于null
数据最大存储量 512MB
数值计算最大范围(java中的long的最大值)(2^63-1)( 9223372036854775807)
5.3.hash 类型数据操作的注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
每个 hash 可以存储 2^32 - 1 个键值对
hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈
5.4.list 类型数据操作注意事项
list中保存的数据都是string类型的,数据总容量是有限的,最多2^{32}-1 (4294967295)个元素
list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
获取全部数据操作结束索引设置为-1
list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载