简介
youtube教程
菜鸟教程
NOsql的key-value数据库
可基于内存亦可持久化
日志型数据库
遵守BSD协议,开源免费
由C语言编写
分布式的基于内存的
缓存工具
关系型数据库和非 的区别:表与表之间建立关联关系;
非~的分类:
- key-value
- Redis, Oracle BDB
 
 - 列存储数据库
 - 通常用于分布式存储的海量数据,键依然存在,但特点是 指向了多个列。这些列是由家族来安排的。如HBase
 - 文档行数据库
- MongoDb. 比键值数据库的查询效率更高
 
 - 图形数据库
- Neo4J
 
 
非~在一下情况更适用
- 数据模型简单
 - 需要灵活性更强的IT系统
 - 对数据库性能要求较高
 - 不需要高度的数据一致性
 - 对于给定key比较容易映射复杂值的环境
 
关系型数据库的执行流程:
select * from usersTable
- 解析字符串 select ….
 - 将字符串转换成对象
 - 经过大量算法在硬盘中查询操作
 - 展示在控制台
 
而redis这种key-value数据库直接通过key查询value
redis特点
- 支持数据持久化,可以将内存中数据保存在磁盘,重启时可以再次加载
 - 不仅支持简单的key-value的类型,同时提供list, set,zset,hash, ordered Set等数据结构的存储
 - 支持数据备份,集群等高可用功能
 - redis的所有操作都是原子性的,要么成功执行要么失败完全不执行。多个操作也支持事务,即原子性,通过multi和exec指令包起来
 - 支持publish/subscribe,通知,key expire等
 
- 单个key存入512M大小
 - 支持多种类型数据结构 string,list,hash,set,zset
 - 单线程 原子性
 - 可以持久化,因为使用了RDB和AOF机制
 - 支持集群,支持16个库
 - 可以做消息队列,比如聊天室IM
 
缺点
- 耗内存,占用内存过高
 - 因为持久化,实现的两种方式:
- 定时快照(snapshot)每次都是写全部数据,代价较高
 - 基于语句追加(aof)只追踪变化的数据,但是追加的log可能过大,同时
 
 
redis config 配置
常用命令
- del key
 - Keys (pattern)
- Keys * 星代表所有
 - keys xx? 问号表示一个字符
 
 - Dump key
 - Exists key: check a key is exist
 - Expire key seconds : set a key expire time,常用业务场景是:限时的优惠活动信息,网站数据缓存比如排行榜按天更新,手机验证码,网站限制访客访问频率
 - pexpire key millseconds:
 - ttl key: check key expire time, -1时永久,-2是不存在(已过期
 - Pttl key :以毫秒为单位
 - persist key : 移除key的过期时间
 - rename key newName
 - move key db
 - type key 返回key的值 的数据类型
 
key的命名规范
- key不要超过1024字节
 - 一个项目中,key最好使用统一模式,例如 user:123:passwordxx
 - 命令 get /set 之类的不区分大小写,key区分大小写
 
数据类型
string
- 二进制数据安全,中间不用编码解码
 - 一个key对应一个value,值可以是图片的二进制序列化
 - string是redis最基本的数据类型,一个键key最多存储512M
 
相关命令
- set key xx,
 - setnx key xx,只有key不存在的情况下设置key值,否则无效
 - get key,如果key 不存在返回nil,如果key值存储的不是字符串类型,比如hash 就会返回一个错误
 - getrange key startIndex endIndex, 根据下标截取字符串
 - getset key xx,如果key存在就返回key旧值并赋值xx,如果key不存在就返回nil并赋值xx
 - strlen key
 - Del key
 - incr key,将key中存储的数字值增加1.如果key不存在就被初始化为0并创建然后执行incr操作(即最初是1)
 - decr key ,自减
 - incrby key count,同上,将key中存储的数字值增加count量
 - decrby key count
 
应用场景:
- 通常用于保存单个字符串或者json字符串数据
 - string是二进制安全的,所以完全可以把图片文件的内容作为字符串来存储,保密性的图片
 - 计数器,如微博数 粉丝数,incr等命令本身就具有原子操作的特性
 
hash
- 类似于object
 
相关命令
- hset key field field-value
 - hget key field
 - hmset key field1 field-value1 [field2 field-value2..]. 一次性赋值整个hash多个fields
 - hmget key field1 [field2 …]
 - hgetall key 返回key的整个hash值
 - hkeys key 获取key的hash值中的所有fieldkey
 - hlen key 获取hash表中字段fields的数量
 - hdel key field1 [field2 …] 删除一个或多个hash字段,当所有字段都删除了就自动回收掉这个key
 - del key
 - hsetnx key field value 同setnx
 - hincrby key field count 同incrby 对hash值中的某个field自增
 - hincrbyfloat key field count 对hash值的中某个field值为浮点数值加
 - hexists key field 查看hash值中指定字段field是否存在
 
应用场景
存储一个对象
hash是最接近关系型数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中
list列表
set集合
zset有序集合