Redis的介绍和使用

1.什么是NOSQL

nosql(not only sql)不仅仅是sql。NoSQL,泛指非关系型的数据库。非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

非关系数据库和关系型数据库之间的区别:  

RDBMS---关系型数据
- 高度组织化结构化数据。
- 结构化查询语言(SQL) select
- 数据和关系都存储在单独的表中。
- 数据操纵语言DML,数据定义语言DDL
- 严格的一致性. 事务 ACID
- 基于事务
NoSQL--非关系型数据库---缓存数据
- 代表着不仅仅是SQL
- 没有声明性查询语言  
- 键 - 值对存储 key value
- 非结构化和不可预知的数据  
- 高性能,高可用性和可伸缩性。 适合搭建集群。

NOSQL的产品 :

Mongodb:

redis:

Hbase:针对大数据

2.什么是Redis

Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。Redis提供数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,地理空间索引和流。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。

3.Redis的优点  

1.Redis读取的速度是110000次/s,写的速度是81000次/s

2.原子 。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

3.支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)

4.持久化--磁盘,主从复制(集群)

5.官方不支持window系统,但是又第三方版本。 linux系统。---

4.如何安装Redis

4.1安装准备

1.安装redis需要的环境。

yum install -y gc-c++

2.上官网下载redis源码安装包。

4.2安装步骤

1.把下载的redis安装包通过xftp拉到/usr/local下

2. 解压redis安装包到/usr/local
3. 进入redis解压目录并执行编译命令 make
4. 执行安装命令 make install

4.3开启redis服务

redis-server redis.conf

4.4.使用redis客户端连接redis服务器

连接redis
redis-cli   默认连接为127.0.0.1 端口号6379

redis-cli  -h redis服务器的ip   -p redis服务器的端口号          远程连接其他人的redis

例如:redis-cli -h 127.0.0.1 -p 6379

4.5简单了解一下redis.conf

# 表示启动redis服务器时 后台启动。
daemonize yes
# 默认的端口号。
port 6379
# 默认运行绑定的端口号~~~~~~~~~~~~~~~~~~~~~~~HTTP协议~~~~~~~~~~~~~~~~~
# bind 127.0.0.1
# 0.0.0.0 表示广播模式 意思是所有人都可以连接。127.0.0.1
bind 0.0.0.0

4.5.1设置redis后台启动

4.5.2修改端口号

4.5.3设置远程连接

4.5.4修改完配置信息后启动redis 

4.6安装redis客户端界面

5.redis常用命令。

http://www.redis.net.cn/order/http://www.redis.net.cn/order/

http://redisdoc.com/http://redisdoc.com/

5.1对key操作的命令

5.1.1. 查看所有的key

5.1.2为指定的key设置过期时间。

5.1.3 查看key的剩余存活时间 ttl key  

返回-1表示永远存在 -2不存在该key

5.1.4删除指定的key  delete key...  返回结果为删除的个数

 

5.1.5 判断指定的key是否存在 exists key

返回0表示不存在   返回1表示存在

5.2对redis数据库的操作

默认redis中由16库。可以通过修改redis配置文件更改数量。

5.2.1   select n: 切换redis库。n[0~databases-1]

5.2.2flushdb: 清空当前所在的库。

5.2.3flushall: 清空所有库的内容

6.redis支持的数据类型。

我们使用频率最高是: Strings字符串类型,Lists列表类型,Sets集合类型,Hashes哈希类型,Sorted Sets 有序集合。这里所谓的类型,就是value的类型。  

6.1 Strings类型

它的value值为String类型,在实际开发中,它可以存储任意的数据类型。因为任何对象可以转换为json字符串。它的默认存放的大小512M.

关于string类型的命令由哪些?

6.1.1 set key value: 存储指定key和value的值。

6.1.2 get key: 获取指定key的value值。

6.1.3 mset key value key value...:存储多个key和value的值

  

6.1.4 mget key key ...:获取多个key对应的value。

6.1.5 setnx key value: 如果指定的key存在,则不存入。如果不存在,则存入。


6.1.6 setex key second value: 存储指定的key和value并设置过期时间。

6.1.7 incr key: 对指定key的value递增。----点赞 收藏数 主键的递增

6.1.8 decr key: 对指定key的value递减

6.2Hash哈希类型

它的value值为hash类型,hash类型由field和value组成。适合存储对象。

关于hash类型的命令由哪些?

6.2.1 hset key field value: 存储指定key的field和value值。

6.2.2 hget key field: 获取指定key的field对应的value值。 

6.2.3 hgetall key: 获取在哈希表中指定 key 的所有字段和值

6.2.4. hkeys key: 获取指定key所有field名称 

6.2.5 hvals key: 获取指定key的所有value值。

6.2.6 hdel key field: 删除指定key对应的field值 

6.3list列表类型

它的value类型为list列表类型,它的value可以是多个值,而且这些者可以重复,有序。一般使用在消息队列。

常用的方法

6.3.1 lpush key value value....:从左边存储指定key的对应列表值。

6.3.2 lpop key: 移出并获取列表的第一个元素

6.3.3lrange key start end: 获取列表指定范围内的元素

6.3.4 lindex key index: 根据下标获取指定的元素 

6.3.5 lset key index value: 修改指定坐标的元素内容 

6.4set集合类型

它的value类型是一个set集合类型,这个集合类型元素无需,且不能重复。求两个集合的交集

常见的命令

6.4.1 sadd key value....:向集合添加一个或多个成员

 

6.4.2 smembers key :返回集合中的所有成员

6.4.3 spop key: 随机获取某个元素并移除

 

6.4.5 sinter k1 k2.。。:    返回给定所有集合的交集

6.5sort set 集合

它的value类型为一个带分数的集合类型。按照分数排序。应用在: 排行榜

6.5.1 zadd key score value score value.....: 往redis中添加有序集合

 

6.5.2 zrange key start end: 获取指定返回的元素

6.5.3 ZREVRANGE k1 0 -1 WITHSCORES: 分数从高到低

7.redis的使用场景

1、热点数据的缓存: 减少对数据库的访问频率和减轻数据库的压力。
2. 限时业务的运用: 秒杀  存储登录者用户信息  存储短信验证码
3. 计数器相关问题: 点赞数 收藏数 播放量
4. 排行榜相关问题: sort set
5. 分布式锁:

8.redis的持久化

持久化:把内存中的数据库保存到磁盘上,防止数据的丢失。

redis支持的持久化方式两种:
  (1)RDB:快照  其实就是把数据以快照的形式保存在磁盘上,什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。
 (2)AOF :日志追加 记录服务器接受的每个写入操作,当服务器启动时再次加载该日志,会把日志中的命令重新执行一遍。

8.1RDB快照持久化方式

8.1.1 RDB的触发方式

1.手动触发
   【1】save堵塞型保存
    [2]bgsave非堵塞型保存
2.自动触发

默认保存的文件名: dump.rdb 可以在redis.conf名称  

save

该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:

 

自动触发rdb

修改redis的配置文件。

8.2 AOF日志追加持久化方式

默认该文件的名称:

 默认aof不会开启。

查看

Redis 用法 简单说明ppt 初学者试用。 string: =============================================================================== SET name "John Doe" GET name 批量的读写操作 MSET age 30 sex "male" MGET age sex 存储数字 INCR age INCRBY age 4 GET age DECR age DECRBY age 4 GET age 修改和获取操作 APPEND name " Mr." GET name STRLEN name SUBSTR name 0 3 bit操作 SETBIT bit 10086 1 SETBIT bit 200 1 SETBIT bit 300 1 GETBIT bit 10086 GETBIT bit 100 BITCOUNT bit 设置超时 SETEX key_with_time 10 "same values" ttl key_with_time ttl key_with_time get key_with_time 如果服务器返回 OK ,那么这个客户端获得锁。 如果服务器返回 NIL ,那么客户端获取锁失败,可以在稍后再重试。 第一次成功,第二次失败(nil) set unknown "some data" NX EX 100 set unknown "some data" NX EX 100 key ===================================================================================== keys * SET name huangz EXISTS name DEL name 数据过期设置 SET name "John Doe" TTL name 先用EXISTS命令查看key值是否存在,然后设置了5秒的过期时间 EXISTS name EXPIRE name 5 EXISTS name GET name List ===================================================================================== 基本list操作 LPUSH students "John Doe" LPUSH students "Captain Kirk" LPUSH students "Sheldon Cooper" LLEN students LRANGE students 0 2 LPOP students LLEN students LRANGE students 0 1 LREM students 1 "John Doe" LLEN students LRANGE students 0 -1 多种修改操作 LINSERT students BEFORE "Captain Kirk" "Dexter Morgan" LRANGE students 0 -1 LPUSH students "Peter Parker" LRANGE students 0 -1 LTRIM students 1 3 LLEN students LRANGE students 0 2 LREM students 1 "John Doe" LLEN students LRANGE students 0 1 阻塞行为 确保key都被删除, 为command列表增加一个值,job 列表为空,被跳过,紧接着 command 列表的第一个元素被 DEL job command request LPUSH command "update system..." LPUSH request "visit page" BLPOP job command request 300 BLPOP job command request 300 BLPOP job command request 300 从别的窗口 LPUSH job "aaa" 等待10秒回怎样呢? BLPOP job command request 10 在MULTI/EXEC事务中的BLPOP # 对非空列表进行操作 RPUSH job "programming" MULTI BLPOP job 30 EXEC # 不阻塞,立即返回 # 对空列表进行操作 LLEN job MULTI BLPOP job 30 EXEC #不阻塞,立即返回(nil) SET ===================================================================================== 基本操作 SADD birds crow SADD birds pigeon SADD birds bat SADD mammals dog SADD mammals cat SADD mammals bat SMEMBERS birds SMEMBERS mammals 修改操作 SREM mammals cat SMEMBERS mammals SADD mammals human SMEMBERS mammals SISMEMBER mammals human 集合的子交并补等操作 SINTER birds mammals SUNION birds mammals SDIFF birds mammals Ordered SET ===================================================================================== ZADD days 0 mon ZADD days 1 tue ZADD days 2 wed ZADD days 3 thu ZADD days 4 fri ZADD days 5 sat ZADD days 6 sun ZCARD days ZRANGE days 0 6 ZSCORE days sat ZCOUNT days 3 6 ZRANGE days 0 -1 ZRANGE days 0 -1 WITHSCORES ZREVRANGE days 0 -1 ZREVRANGE days 0 -1 WITHSCORES ZRANGEBYSCORE days 0 6 ZRANGEBYSCORE days 0 6 WITHSCORES ZRANK days sat HASH ===================================================================================== HSET student name "Ganesh" HSET student age 30 HSET student sex "Male" HKEYS student HVALS student HGETALL student HGET student sex HDEL student sex HGETALL student 多值设置 HMSET kid name Akshi age 2 sex Female HMGET kid name age sex 数据库操作 ===================================================================================== DBSIZE # 0 号数据库的 key 数量 SELECT 1 # 切换到 1 号数据库 DBSIZE # 1 号数据库的 key 数量 flushall # 清空所有数据库的所有 key DBSIZE # 不但 1 号数据库被清空了 SELECT 0 # 0 号数据库(以及其他所有数据库)也一样 DBSIZE -在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个 key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。 这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。 Publish/Subscribe ===================================================================================== 用一个客户端订阅管道 SUBSCRIBE channelone 另一个客户端往这个管道推送信息 PUBLISH channelone hello PUBLISH channelone world 用一个客户端订阅所有channel开头的信息通道 PSUBSCRIBE channel* 另一个客户端对两个推送信息 PUBLISH channelone hello PUBLISH channeltwo world 事务性 ===================================================================================== NX结尾命令都是判断在这个值没有时才进行某个命令。 SET name "John Doe" SETNX name "Dexter Morgan" GET name Redis还支持自定义的命令组合,通过MULTI和EXEC,将几个命令组合起来执行 SET counter 0 MULTI INCR counter INCR counter INCR counter EXEC GET counter DISCARD命令来中断执行中的命令序列 SET counter 0 MULTI INCR counter INCR counter INCR counter DISCARD GET counter 持久化 ===================================================================================== 数据快照的原理是将整个Redis中存的所有数据遍历一遍存到一个扩展名为rdb的数据文件中。通过SAVE命令可以调用这个过程。 SET name "John Doe" SAVE SET name "Sheldon Cooper" BGSAVE /home/dong1/redis-2.6.16/src/dump.rdb 其日志文件以aof结局,我们一般各为aof文件。要开启aof日志的记录 你需要在配置文件中进行如下设置: appendonly yes 管理命令 ===================================================================================== Redis支持多个DB,默认是16个,你可以设置将数据存在哪一个DB中,不同DB间的数据具有隔离性。也可以在多个DB间移动数据。 SELECT 0 SET name "John Doe" SELECT 1 GET name SELECT 0 MOVE name 1 SELECT 1 GET name DBSIZE INFO FLUSHDB SET name "John Doe" DBSIZE SELECT 1 DBSIZE SELECT 0 FLUSHDB DBSIZE FLUSHALL DBSIZE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值