nosql数据库之Redis概念及基本操作

一、概述

  redis是一种nosql数据库(非关系型数据库),他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))。相关参考文档:http://redisdoc.com/index.html

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
[[email protected] ~]# 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  
[[email protected] 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并创建几个字符串并提出

[[email protected] 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及密码)

[[email protected] redis-5.0.0]# vim redis.conf
88 protected-mode yes
89 requirepass 123456

第三步:重启Redis

[[email protected] redis-5.0.0]# redis-cli shutdown
[[email protected] redis-5.0.0]# redis-server redis.conf 

第四步:登录Redis(可以正常登录,但是无法查看原有的内容了)

[[email protected] 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

[[email protected] 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 23

2. 查看字符串对应的值:get key    #返回 key 所关联的字符串值。
  get age

3. APPEND key value    #将 value 追加到 key 原来的值的末尾
  append age ren

4. MSET key value [key value ...]    #同时设置一个或多个 key-value 对
  mset addr jiangsu tel 123 gender male

5. MGET key [key ...]   #返回所有(一个或多个)给定 key 的值
  mget addr tel gender

6. INCR key  #将 key 中储存的数字值增一
  incr num

7. DECR key   #将 key 中储存的数字值减一
  decr num

8. STRLEN key  #返回 key 所储存的字符串值的长度
  strlen tel

9. DEL key [key ...]  #删除给定的一个或多个 key
  del age num

10. 设置过期时间
    set key value EX timeout
    或:
    setex key timeout value
11. 查看过期时间
    ttl key
      如:
    ttl username
12. 查看当前redis所有的key
    keys *

9、列表(list)

1. 在列表左边添加一个或多个元素(表头):LPUSH key value [value ...]
    lpush key value

2. 在列表右边添加一个或多个元素(表尾):RPUSH key value [value ...]
    rpush key value

3. 查看列表中的元素:LRANGE key start stop#返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定
    lrange key 0 10

4. 移除并返回列表key的头元素:
    lpop key

5. 移除并返回列表的尾元素:
    rpop key

6. 指定返回第几个元素:
    lindex key index

7. 获取列表中的元素个数:
    llen key
    如:
    llen languages

8. 删除指定的元素:
    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 baidu

3. 删除field中的某个field:
  hdel key field
  如:
  hdel website baidu

4. 获取某个哈希中所有的field和value:
  hgetall key
  如:
  hgetall website

5. 获取某个哈希中所有的field:
  hkeys key
  如:
  hkeys website

6. 获取某个哈希中所有的值:
  hvals key
  如:
  hvals website

7. 判断哈希中是否存在某个field:
  hexists key field
  如:
  hexists website baidu

8. 获取哈希中总共的键值对数量:
  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

时间: 2024-08-02 09:13:47

nosql数据库之Redis概念及基本操作的相关文章

NoSQL数据库之redis持久化存储(一)

第1章 redis存储系统 1.1 redis概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务软件很像,但是redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列表),sets(集合)和sorted sets(有序集合)等. 这些数据类型支持push/pop,add/remove及取交集,并集和差集及更丰富的操作,而且这些操作

NoSql数据库之--Redis

什么是NoSql 概念 SQL: 结构化查询语言 -- 用到关系型数据库 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库.随着互联网2003年之后web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的交友类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展. 关系型数据库(mysql sqlserver oracle):以关系(由

NoSQL数据库之Redis数据库:Redis的介绍与安装部署

 NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显的力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展. NoSQL的特点: 特点一: 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准.ACID属性.表结构等等,这

NoSQL数据库:Redis适用场景及产品定位

传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间. 2.Memcached与MySQL数据库数据一致性问题. 3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL

NoSQL数据库:Redis内存使用优化与存储

Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: ●String ●Hash ●List ●Set ●Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:ty

NoSQL数据库一Redis基本使用

基本操作 参考教程:https://www.yiibai.com/redis/Redis 是 Key-Value 内存数据库,操作是通过各种指令进行的,比如 SET 指令可以设置键值对,而 GET 指令则获取某一个键的值.不同的数据结构,Redis 有不同的指令,这样指令一共有几十个,下面主要介绍一些常用的指令. Redis 对 Key 也就是键有各种各样的指令,主要有下面的指令(下面的指令中小写字符串都是参数,可以自定义): SET key value 设置键值:EXISTS key 判断键是

nosql数据库之Redis集群

Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为. Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求. R

为什么会出现NoSql数据库

NoSQL即Not-Only SQL是关系型数据库的良好补充 关系型数据库是基于关系模型提出来的数据库.那么什么是关系模型呢?以行和列的方式二维表的方式存储数据的模型就是关系型数据库.例如:mysql和oracle 随着互联网web网站的兴起,关系型数据库暴露的缺点越来越多,关系型数据库可以应付上万次的sql查询,但是对于上万次的sql写数据的请求,硬盘io就受不鸟了 下面小编来说说硬盘和内存条有什么区别(内存条又称内存) 硬盘:用来存储数据的计算机配件.是非易失性储存器,说得直白点,就是你关了

HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比

HBase.Redis.MongoDB.Couchbase.LevelDB主流 NoSQL 数据库的对比 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,