nosql数据库之Redis概念及基本操作
一、概述
redis是一种nosql数据库(非关系型数据库),他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))。相关参考文档:http://redisdoc.com/index.html
Redis和关系型数据库是配合使用的,是对关系型数据库的有效补充
Redis的持久化
Redis持久化会在磁盘上依赖两个文件(数据文件:rdb;日志文件:aof)
redis实现持久化两种机制:RDB(周期的将内存中的数据备份到磁盘);AOF(借助于一个日志文件,这个文件会记录每次操作)
Redis中的数据类型
字符类型、列表类型、有序集合类型、无序集合类型、哈希表类型
二、Redis使用场景
1、登录会话存储:存储在redis中,与memcached相比,数据不会丢失。(session共享、会话保持)
2、排行版/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。
3、作为消息队列:比如celery就是使用redis作为中间人。
4、当前在线人数:还是之前的秀场例子,会显示当前系统有多少在线人数。
5、一些常用的数据缓存:比如我们的BBS论坛,板块不会经常变化的,但是每次访问首页都要从mysql中获取,可以在redis中缓存起来,不用每次请求数据库。
6、把前200篇文章缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文章和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
7、好友关系:微博的好友关系使用redis实现。
8、发布和订阅功能:可以用来做聊天软件
三、Redis和memcached的比较:
memcached | redis | |
---|---|---|
类型 | 纯内存数据库 | 内存磁盘同步数据库 |
数据类型 | 在定义value时就要固定数据类型 | 不需要 |
虚拟内存 | 不支持 | 支持 |
过期策略 | 支持 | 支持 |
存储数据安全 | 不支持 | 可以将数据同步到dump.db中 |
灾难恢复 | 不支持 | 可以将磁盘中的数据恢复到内存中 |
分布式 | 支持 | 主从同步 |
订阅与发布 | 不支持 | 支持 |
四、Redis的安装
1、yum
直接使用yum即可进行安装
yum install redis -y
[root@ren6 ~]# yum list |grep redis
redis.x86_64 3.2.12-2.el7 base
使用yum安装的Redis版本是3.2的,如果想安装最新的版本要在Redis官网下载:https://redis.io
2、编译安装
wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar -zxvf redis-5.0.0.tar.gz yum install gcc yum install gcc-c++ make cp src/redis-server /usr/bin/ cp src/redis-cli /usr/bin/
五、Redis日常操作
1、启动命令
systemctl restart redis [root@ren6 redis-5.0.0]# redis-server redis.conf #编译安装
2、停止命令
service redis stop / systemctl stop redis redis-cli shutdown
3、连接命令
redis-cli -h 127.0.0.1 -p 6379
4、切换数据库(默认在0库)
select 2
5、配置文件参数
bind 127.0.0.1 #对外提供链接的地址 port 6379 #默认端口号 daemonize no #守护进程(如果是yes后台运行)应该改为yes databases 16 #(redis数据库用0,1,2,3....代表,最大255) save 900 1 #每900秒有1次增删改操作就同步到磁盘当中 dbfilename dump.rdb #rdb备份方式的文件名字(默认开启) dir ./ #备份文件存放位置 appendonly no #aof备份是否开启(默认不开启) appendfilename "appendonly.aof" #aof备份文件名称 appendfsync everysec|always|no #aof同步机制,每秒同步到磁盘当中(no 表示不负责同步,将同步任务交给文件系统,差不多半个小时同步一次) rdbcompression yes #rdb默认为压缩 timeout 300 #当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能 loglevel notice #指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 notice
6、启用Redis的认证功能
第一步:登录Redis并创建几个字符串并提出
[root@ren6 redis-5.0.0]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> get name "ryzzzz" 127.0.0.1:6379> exit
第二步:修改Redis配置文件(启动protect-mode,并添加一行requirepass及密码)
[root@ren6 redis-5.0.0]# vim redis.conf 88 protected-mode yes 89 requirepass 123456
第三步:重启Redis
[root@ren6 redis-5.0.0]# redis-cli shutdown [root@ren6 redis-5.0.0]# redis-server redis.conf
第四步:登录Redis(可以正常登录,但是无法查看原有的内容了)
[root@ren6 redis-5.0.0]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> get name (error) NOAUTH Authentication required.
第五步:验证登录(使用auth加上配置文件中定义的密码即可进行验证,再次登录后就可以查看原来的内容)
127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> get name "ryzzzz"
7、Redis的消息模式
发布订阅(pub/sub)是一种消息通信模式,主要目的是解除消息发布者和消息订阅者之间的耦合。redis作为一个pub/sub的server,在订阅者和发布者之间启动了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型。redis将信息类型成为通道(channel).当发布者通过publish命令向redis server 发送特定类型的信息时,订阅该信息类型的全部client都会受到此消息。
订阅的基本格式:
SUBSCRIBE channel [channel ...] #订阅给定的一个或多个频道的信息
发送消息的基本格式:
PUBLISH channel message #将信息 message 发送到指定的频道 channel
第一步:xshell开启两个窗口,并都登录Redis
[root@ren6 redis-5.0.0]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> auth 123456 OK
第二步:先在一个窗口订阅频道
127.0.0.1:6379> subscribe news Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news"
第三步:后在另一个窗口中的同一频道发布内容
127.0.0.1:6379> publish news "my name is ryz" (integer) 1 127.0.0.1:6379> publish news "welcome to my homepage" (integer) 1
第四步:在第一个窗口查看(可以接收到订阅频道的信息)
127.0.0.1:6379> subscribe news Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news" 3) (integer) 1 1) "message" 2) "news" 3) "my name is ryz" 1) "message" 2) "news" 3) "welcome to my homepage"
8、字符类型
1. 添加:set key value #将字符串值 value 关联到 key set age 232. 查看字符串对应的值:get key #返回 key 所关联的字符串值。get age3. APPEND key value #将 value 追加到 key 原来的值的末尾append age ren4. MSET key value [key value ...] #同时设置一个或多个 key-value 对mset addr jiangsu tel 123 gender male5. MGET key [key ...] #返回所有(一个或多个)给定 key 的值mget addr tel gender6. INCR key #将 key 中储存的数字值增一incr num7. DECR key #将 key 中储存的数字值减一decr num8. STRLEN key #返回 key 所储存的字符串值的长度strlen tel9. DEL key [key ...] #删除给定的一个或多个 keydel age num10. 设置过期时间set key value EX timeout或:setex key timeout value 11. 查看过期时间ttl key如:ttl username 12. 查看当前redis所有的keykeys *
9、列表(list)
1. 在列表左边添加一个或多个元素(表头):LPUSH key value [value ...]lpush key value2. 在列表右边添加一个或多个元素(表尾):RPUSH key value [value ...] rpush key value3. 查看列表中的元素:LRANGE key start stop#返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定lrange key 0 104. 移除并返回列表key的头元素:lpop key5. 移除并返回列表的尾元素:rpop key6. 指定返回第几个元素:lindex key index7. 获取列表中的元素个数:llen key如:llen languages8. 删除指定的元素:lrem key count value如:lrem languages 0 php
根据参数 count 的值,移除列表中与参数 value 相等的元素。count的值可以是以下几种: count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count。 count < 0:从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值。 count = 0:移除表中所有与value 相等的值。
10、集合(set)
1. 添加元素:sadd set value1 value2....如:sadd team xiaotuo datuo 2. 查看元素:smembers set如:smembers team 3. 移除元素:srem set member...如:srem team xiaotuo datuo 4. 查看集合中的元素个数:scard set如:scard team1 5. 获取多个集合的交集:sinter set1 set2如:sinter team1 team2 6. 获取多个集合的并集:sunion set1 set2如:sunion team1 team2 7. 获取多个集合的差集:sdiff set1 set2如:sdiff team1 team2
#有序集合 1. ZADD key score member [[score member] [score member] ...] #将一个或多个 member 元素及其 score 值加入到有序集 key 当中zadd ke 9 baidu 2. ZRANGE key start stop [WITHSCORES] #返回有序集 key 中,指定区间内的成员zrange ke 0 9 3. ZREM key member [member ...] #移除有序集 key 中的一个或多个成员zrem ke baidu
11、哈希(hash)
1. 添加一个新值:hset key field value如:hset website baidu baidu.com将哈希表key中的域field的值设为value。如果key不存在,一个新的哈希表被创建并进行 HSET操作。如果域 field已经存在于哈希表中,旧值将被覆盖。2. 获取哈希中的field对应的值:hget key field如:hget website baidu3. 删除field中的某个field:hdel key field如:hdel website baidu4. 获取某个哈希中所有的field和value:hgetall key如:hgetall website5. 获取某个哈希中所有的field:hkeys key如:hkeys website6. 获取某个哈希中所有的值:hvals key如:hvals website7. 判断哈希中是否存在某个field:hexists key field如:hexists website baidu8. 获取哈希中总共的键值对数量:hlen field如:hlen website
12、事务(Redis和mysql一样也支持事务)
Redis事务可以一次执行多个命令,事务具有以下特征:
(1)隔离操作:事务中的所有命令都会序列化、按顺序地执行,不会被其它命令打扰;
(2)原子操作:事务中的命令要么全部被执行,要么全部都不执行;
开启事务:
multi 以后执行的所有命令,都在这个事务中执行的。
执行(提交)事务:
exec 会将在multi和exec中的操作一并提交。
取消(回滚)事务:
discard 会将multi后的所有命令取消。
监视一个或多个key:
watch key... 监视一个(或多个)key,如果在事务执行之前这个(或这些) key被其他命令所改动,那么事务将被打断。
取消所有key的监视:
unwatch
转载于:https://www.cnblogs.com/renyz/p/11562173.html
nosql数据库之Redis概念及基本操作相关推荐
- NoSQL(一):NoSQL数据库、redis
NoSQL概述 数据库类型 RDBMS 关系型数据库管理系统 - Relational Database Management System - 按照预先设置的组织结构,将数据存储在物理介质上 ...
- Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Mem ...
- NoSQL数据库之Redis数据库:Redis的介绍与安装部署(redis-2.8.19/3.2.5)
NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...
- 大数据笔记(二十一)——NoSQL数据库之Redis
一.Redis内存数据库 一个key-value存储系统,支持存储的value包括string(字符串).list(链表).set(集合).zset(sorted set--有序集合)和hash(哈希 ...
- NoSQL数据库之Redis(三):常用五大数据类型
目录 Redis键(key) 常用命令 Redis字符串(String) 常用命令 原子性 数据结构 Redis列表(List) 常用命令 数据结构 Redis集合(Set) 常用命令 数据结构 Re ...
- Redis:Nosql数据库
Redis Nosql技术 redis介绍 什么是NoSql NoSql是为了解决高并发.高可扩展.高可用以及高写入而产生的数据库解决方案. NoSql就是Not Only sql.Nosql是非关系 ...
- NoSQL 数据库和传统关系型数据库到底有什么区别?
人们都会问,数据库到底有哪些不一样的关系 nosql数据库和传统关系库到底啥区别? 问题来自社区会员,回答来自社区交流,供同行参考 @zhuqibs Mcd 软件开发工程师: 长篇大论就不写了,就写几 ...
- 第一篇 Nosql讲解之Redis,Memchche,MongoDb的区别
第一篇 Nosql讲解之Redis,Memchche,MongoDb的区别 本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Redis.Memchache.MongoDb和他们 ...
- 嘿嘿又一数据库!redis数据库!redis部署、持久化及性能管理!
redis数据库 一.关系数据库和非关系数据库 1.关系型数据库(SQL) 2.非关系型数据库(nosql) 3.关系型数据库和非关系型数据库区别 (1)数据存储方式不同 (2)扩展方式不同 4.非关 ...
- HBase、Redis、MongoDB、Couchbase、LevelDB 五款主流NoSQL数据库大比拼
在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资 ...
最新文章
- python升级知识整理 第五节:文件整理
- time.h中的相关计时函数time,localtime,clock等详解
- 表单和v-model
- 区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一
- C语言atoi()函数用法
- Java.io包中常用的类
- mysql英文版怎么调中文_MYSQL 5.6安装设置中英文翻译
- FocalLoss的Caffe复现版
- 关于dlg和pro的问题
- C++ 定义 string
- python输出自己的名字_【Python】Python-用大写字母打印你的名字
- C#笔记(一):类型,泛型,集合
- ActionScript 中的字符串替换函数
- 自动驾驶的“天眼”!聊一聊高精地图领域中所有主流的制作方案
- SLA、BFD、NQA、ACl 笔记
- scrapy下载图片(《精通scrapy网络爬虫》第九章)
- java学生成绩分90及格_Java基础练习:题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。 - 菜鸟头头...
- SSM+图书馆电子文件资源管理 毕业设计-附源码191614
- 【linux 释放内存】linux释放内存骚操作
- 图像识别 常用数据集