Redis数据库详解
NoSQL
若杀死进程应使用pkill
数据设计模式:分布式、非关系型、不提供ACID
特性:简单数据模型、源数据和应用数据分离、弱一致性
优势:
避免不必要的复杂性
高吞吐量,
高 水平扩展能力和低端硬件集群
不使用对象-关系映射
缺点:
不支持ACID
功能过于简单
没有统一的数据查询模型
特点:
处理差大量的数据
运行再便宜的pc服务器集群上
击碎了性能瓶颈
使用场景:
1、对数据并发读写
2、对海量数据的高效率存储与访问
3、对数据的高可扩展性和高可用性(分布式)
NOSQL的数据存储模型
键值模型
数据模型:key-value存储
查找速度快
缺点:数据无结构,通常被当做字符串或二进制数据
应用场景:内容缓存
实例:redis、Dynmo
列式模型
数据模型:数据按列存储,将一列数据存在一起
优点:查找迅速,可扩展性强、易于实现分布式
缺点:功能相对于SQL有限
应用场景:分布式文件系统或分布式存储
实例:Bigtables、Cassandra、HBase、Hypertable
文档模型
数据模型:与键值模型相似,value指向结构化数据;
优点:数据格式不严格,无需定义事先定义结构
缺点:查新性能不高,缺乏统一查询语法
应用场景:web应用,
实例:MongoDB、CouchDB
图式模型
数据模型:图结构模型
优点:利用图结构相关算法提高性能,并是特殊场景应用需求
缺点:难以实现分布式、功能有限
应用场景:社交网站、推荐系统、关系图谱
实例:Neo4J
NoSQL
特性
1、基于文档数据库系统(JSON、BSON半结构化数据/)
2、保证其性能
C++研发
支持各种索引
不支持事务,
操作是在内存中进行(延迟写操作)
3、支持扩展性
支持复制
4、支持基于文档的查询
5、支持使用数据的分组集合操作
6、支持网格文件系统(GridFS)
7、支持地理位置空间索引
8、支持动态查询,查询的性能剖析
9、基于复制进行故障转移,通过选举协议选举。自动故障转移
适用场景
1、web网站
2、缓存
3、海量存储
4、高可扩展性
5、应用程序编程环境中
数据库模型
面向collection(集合)的数据库
使用数据库:但数据库无需创建
每一个文档相当于一个mysql的行,多个文档组合起来相当于一个集合,相当于mysql的集合
集合无需事先定义
基于C/S架构:服务器端mongod,客户端mongo
Redis介绍
服务端默认连接端口号为6379
是一个key-value存储系统,它支持存储的value类型很多。包括string(字符串)、list(链表)、set(集合)、zset(有序集合)。
支持各种不同方式的排序
为保证效率,数据都是缓存在内存中,他也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
适用场合:目前全球最大的redis用户时新浪微博
应用程序直接访问redis
应用程序直接访问redis,只有当redis访问你失败时才访问mysql。(redis集群与mysql集群数据同步)
redis数据库提供纵多种灵活的数据结构和数据操作,为不同的数据构建不同的库
安装
下载安装包:http://redis.io/download
wget http://download.redis.io/releases/redis-3.2.3.tar.gz
tar xzf redis-3.2.3.tar.gz
cd redis-3.2.3
make MALLOC=libc && cd src && make install
mv redis-benchmark redis-check-aof redis-check-rdb redis-cli mkreleasehdr.sh redis-sentinel redis-server redis-trib.rb /usr/sbin/
,不存在则插入。
setex 键 数字 值 //设置key对应的值为string类型的value,并指定此键值对应的有效期(默认为秒)
mset 键 值 键 值 ...... //批量设置多个key的值,成功返回ok,失败返回0
msetnx 键 值 键 值 ...... //批量设置多个key的值,成功返回ok,失败返回0.不会覆盖已经存在的键值对!
get 键 //获取值
getset 键 值 //替换key的值,并返回key的旧值
mget 键 键 键 ..... //批量获取多个key的值,若对应key不存在则对应返回nil
incr 键 //对key的值做加加操作,并返回新的值
incrby 键 数值 //同incr类似,加指定值,key不存在会添加key,并认为原来的value是0
decr 键 //对key的值做减减操作,并返回新的值
decrby 键 数值 //同incr类似,减指定值,key不存在会添加key,并认为原来的value是0
append 键 添加的新值 //给指定key的字符串追加value,返回新字符串的长度
命令(hashes类型)
Redish hash 是一个syringe类型的field和value的映射表。他的添加、删除操作都是0(1)(平均)。
hash特别适合于存储对象。相较于将对象的每一个字段存成单个string类型。
将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
hset 键 hash表字段 对应的值 //设置一个hash表,若key不存在则先创建
hsetnx 键 hash表字段 值 //设置一个hash表,若key不存在则先创建,若存在返回0。
hmset 键 hash表字段 值 hash表字段 值 //同时设置hash的多个表与值
hget 键 hash表字段 //获取hash表中的值
hmget //获取全部指定的hash field
hexists 键 表字段 //测试指定表字段是否存在,存在返回1.
hlen 键 //返回指定hash的field数量
hdel 键 表字段 //删除指定的表字段中的值
hkeys 键 //返回hash的所有表字段
命令(lists类型)
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等,操作中的key理解为链表的名字。
Redis的list类型其实就是一个每个子元素都是一个string类型的双向链表。
我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。
lpush 键 值 //在key对应的list的头部添加字符串元素
rpush 键 值 //在key对应的list的尾部添加字符串元素
linsert 键 before 旧值 新插入的值 //在key对应的list的特定位置前或者后插入字符串
lrange 键 0 -1 //取值,从头开始取,从尾到头为正方向
lset 键 下标 值 //设置list中指定下标的元素值,用于替换,下标:第一个单词下标为0,依次往下数。
lrem 键 N个 值 //从某个键中删除N个与其他值相同的值(N<0从尾部删除,N=0全部删除)
ltrim 键 下标 下标 //保留从下标到下标内的内容,未保留的值将全部删除
lpop 键 //从表的头部删除元素,并返回删除的元素
rpop 键 //从表的尾部删除元素,并返回删除的元素
rpoplpush 键 键 //把第一个键中的尾部的一个值弹出,给到第二个键中,并且是从头部压入。
lindex 键 索引(数字) //返回名称为key的list中index位置的元素
命令(sets类型)
set是集合,它是string类型的无序集合,set是通过hash table实现的,添加、删除和查找的复杂度都说0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。
例子:
set1 (1,2) set2(2,3)
取set1与2的并集:1,2,3
取set1与2的交集:2
取set1与2的差集:1,3
sadd 键 值(元素) //向名称为key的set中添加元素
srem 键 值 //删除名称为key的set中的元素
spop 键 //随机弹出并删除集合中的一个元素
srandmember 键/集合 //随机返回键或者集合中的一个元素,但不会删除这个元素
sdiff 键 键 //返回两个数组中的差集,以第一个键中的元素为标准
sdiffstore 存储键 键 键 //返回两个键中元素的差集并且保存到一个键中
sinter 键 键 //返回所有给定键的交集
sinterstore 存储键 键 键 //返回两个键中元素的交集并且保存到一个键中
sunion 键 键 //返回所有给定key的并集
sunionstore 存储键 键 键 //返回所有给定key的并集,并且保存到一个键中
smove 键(移除) 键(添加) 要剪切的元素 //从第一个集合中移除一个元素,并移动到第二个对应的集合中
smembers //查看添加的集合
scard 键/集合 //查看集合中元素的个数
命令(sorted sets类型)
是set的一个升级版本,他是在set的基础上增加了一个顺序属性,这个 属性在添加、修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。
可以理解为两列的mysql表,一列存储value(值),一列存储顺序。
操作中key(键)理解为zset的名字。
zadd 键 顺序(数字) 值 //向键中的元素添加顺序,用于排序,若元素存在,则更新其顺序。
zrem 键 值 //删除集合中的元素
zrank 键 值//返回名称为键中元素的排名,(按score从小到大排序),即下标。排完序然后找索引值
zrevrank 键 值//返回名称为键中元素的排名,(按score从大到小排序),即下标。排完序然后找索引值
zrangebyscore 键 数字 数字 withscores // 先升序排序,返回score给定范围内的数字。数字 数字:这两个数字为范围
zcount 键 数字 数字 //返回集合中给定score在给定范围的数量
zcard 键 //返回集合中所有元素的个数
zremrangebyrank 键 数字 数字 //删除集合中排名在给定范围中的元素(按索引来删除)
zremrangebyscore 键 数字 数字 //删除集合中排名在给定范围中的元素(按顺序来删除)
zrange 键 0 -1 withscores //在集合中取元素。0与-1为索引,从第一个到最后一个(升序)。withscores为输出顺序号。
zrevrange 键 0 -1 withscores //在集合中取元素。0与-1为索引,从第一个到最后一个(降序)。withscores为输出顺序号。
键值相关命令
keys * //返回库中所有的键,模糊匹配,my*、m*y.........都可以。
exists 键 //确认一个键是否存在
del 键 //删除一个键
expire 键 数字(秒) //对一个已存在的键设置过期时间
persist 键 //取消给键的过期时间
ttl 键 //获取这个键的有效时长,直至为-1,说明此值已经过期
randomkey //随机返回键空间值得一个键
move //将当前数据库中的键转移到其他数据库中
select 数字 //选择数据库,进入客户端时,默认进入0数据库,一共16个数据库。
rename 键名 键新名 //重命名键
type 键 //返回键的类型
服务器相关命令
ping //测试连接是否正常
select 数字(0-15) //选择数据库,Redis数据库编号从0-15,我们可以选择任意一个数据库来进行数据存取。
dbsize // 返回当前数据库中key的数目
info //获取服务器的信息和统计
config 键 //实时传输与存储收到的请求
flushdb //删除当前数据库中所有的key
flushall //删除所有数据库中的所有的键
Redis数据库详解的更多相关文章
- redis配置详解
##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...
- Redis协议详解
smark Beetle可靠.高性能的.Net Socket Tcp通讯组件 支持flash amf3,protobuf,Silverlight,windows phone Redis协议详解 由于前 ...
- Redis学习——详解Redis配置文件(三)
一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...
- Redis:默认配置文件redis.conf详解
转: Redis:默认配置文件redis.conf详解 # Redis配置文件样例 # Note on units: when memory size is needed, it is possibl ...
- Redis配置文件redis.conf详解
一.Redis配置文件redis.conf详解 # Note on units: when memory size is needed, it is possible to specifiy # it ...
- [转]使用python来操作redis用法详解
转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...
- linux离线部署redis及redis.conf详解
一.离线部署redis 由于博主部署的虚拟机没有网络也没有gcc编译器,所以就寻找具备gcc编译器的编译环境把redis编译安装好,Copy Redis安装目录文件夹到目标虚拟机的目录下.copy时r ...
- 5种Redis数据结构详解
本文主要和大家分享 5种Redis数据结构详解,希望文中的案例和代码,能帮助到大家. 转载链接:https://www.php.cn/php-weizijiaocheng-388126.html 2. ...
- python操作redis用法详解
python操作redis用法详解 转载地址 1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用 ...
随机推荐
- ES3、ES5、ES6对象代理的写法差异
ES3的对象代理写法: console.log('定义私有变量ES3写法:') // ES3 var Person = function (){ var data = { name:'ES3', ag ...
- c# WF 第11节 RichTextBox
本节内容: 1:RichTextBox的简介: 2:实例 1:RichTextBox的简介: 2:实例 实现实例: 1个RichTextBox 2个label 9 个button 步骤一: 步骤2 ...
- 【转】java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- Python文件读取中:f.seek(0)和f.seek(0,0)有什么区别
file.seek()方法标准格式是:seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始 ...
- Python 链表(linked list)
链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点组成,结点可以在运行时动态生成 优点 由于不必须按顺序存储,链表在插入.删除的时候 ...
- matlab练习程序(贝塞尔曲线)
下面三个公式分别是一次.二次和三次贝塞尔曲线公式: 通用的贝塞尔曲线公式如下: 可以看出,系数是由一个杨辉三角组成的. 这里的一次或者二次三次由控制点个数来决定,次数等于控制点个数-1. 实现的效果如 ...
- CF 938G Shortest Path Queries
又到了喜闻乐见的写博客清醒时间了233,今天做的依然是线段树分治 这题算是经典应用了吧,假的动态图(可离线)问题 首先不难想到对于询问的时间进行线段树分治,这样就可以把每一条边出现的时间区间扔进线段树 ...
- 重构与模式 (Joshua Kerievsky 著)
第1章 本书的写作缘由 第2章 重构 第3章 模式 第4章 代码坏味 第5章 模式导向的重构目录 第6章 创建 第7章 简化 第8章 泛化 第9章 保护 第10章 聚集操作 第11章 实用重构 参考文 ...
- 解决centos ssh连接很慢的问题
更改配置文件vi /etc/ssh/sshd_config找到UseDNS 将UseDNS前面的#删除,并将YES改为NO,若找不到UseDNS,则手动添加UseDNS,并将其设置成No保存并重启ss ...
- HTML+css基础 css的几种形式 css选择器的两大特性
3.外联样式 css选择器的两大特性 1.继承性:所有跟文本字体有关的属性都会被子元素继承.且权重是0000. 2.层叠性:就是解决选择器权重大小的一种能力,就是看那个选择器的权重大.谁的权重大听谁的 ...