项目前导 三

Redis

1.1 Redis内存数据库

背景

随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务 I/O 的压力,来解决系统性能上的瓶颈。

数据库的发展历史

1.在互联网+大数据来临之前,企业的一些内部信息管理系统,一个单个数据库实例就能满足系统的需求。
单数据库实例。

2.随着系统访问用户的增多,数据量的增大,单个数据库实例已经满足不了系统的读取需求。
缓存(memcache)+单数据库实例

3.缓存可以缓解系统的读取压力,但是数据量的写入压力持续增大。
缓存+主从数据库,读写分离

4.数据量再次增大,读写分离以后,主数据库的写库压力出现瓶颈。
缓存+主从数据库集群+读写分离+分库分表

5.互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性高,实时性高的,并且数据格式不固定的数据。

nosql + 主从数据库集群+读写分离+分库分表

Redis
Redis 是一个高性能的,开源的,C语言开发的,键对存储数据的 nosql数据库。
NoSQL:not only sql,泛指非关系型数据库Redis/MongoDB/Hbase Hadoop
关系型数据库:MySQL、oracle、SqlServer

Redis特性

  • Redis 支持数据的持久性,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value 类型的数据,同时还提供List,set等数据类型。
  • Redis 支持数据的备份。

Redis 发展历程
Redis 的发展大概经过了以下几个过程。

  • 2009年5月发布Redis 初始版本;
  • 2012年发布Redis2.6,重构了大量的核心代码,去掉了所有和集群相关的代码。
  • 2013年11月发布 Redis 2.8,增加了部分主从复制功能;
  • 2015年 4月发布的 Redis 3.0,增加了集群功能。
  • 2017 年7月发布Redis 4.0,优化了复制功能和新增了混合持久化;
  • 2018年10月发布Redis 5.0,增加了 Stream 数据类型;
  • 2020年3-5月计划发布Redis发布 6.0稳定版。

Redis 有什么用?
Redis的主要作用:快速存取。

Redis应用场景
点赞/秒杀/直播平台的在线好友列表/商品排行榜/单点登录。

Redis 怎么用?
官网地址:https://redis.io/
命令地址:http://doc.redisfans.com/

Redis 的五大数据类型以及应用场景。

string/list/set/hash/zset

Redis的安装及启动

Redis安装

sudo apt-get install redis-server

查看帮助命令

redis-server --help

编辑Redis 配置文件

sudo vim/etc/redis/redis.comf
将 deamonize no 改为 demonize yes 保存退出

启动redis 服务

redis-server

打开服务

sudo service Redis start

关闭服务

sudo service redis ztop

Redis 的配置文件

/etc/redis/redis.conf

当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。
daemonize no

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

设置数据库的数目。
databases 16

根据给定的时间间隔和写入次数将数据保存到磁盘
下面的例子的意思是:
900 秒内如果至少有 1 个 key 的值变化,则保存
300 秒内如果至少有 10 个 key 的值变化,则保存
60 秒内如果至少有 10000 个 key 的值变化,则保存
 
save 900 1
save 300 10
save 60 10000

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

Redis默认只允许本地连接,不允许其他机器连接
bind 127.0.0.1

更多配置问文件::https://www.cnblogs.com/kreo/p/4423362.html

Redis 常用五大数据类型**

1.redis-string

string 是 redis 最基本的类型,一个key 对应一个value,string 可以包含任何数据,最大不能超过512M。

1.set/get/del/append/strlen

set ---设置值
get ---获取值
mset ---设置多个值
mget --- 获取多个值
append ---添加字段
del --- 删除
strlen --- 返回字符串长度

2.incr/decr/incrby/decrby

incr ---- 增加
decr ---- 减少
incrby 制定增加多少
decrby ---- 制定减少多少

3.getrange/settrange

getrange ---- 获取指定区间范围内的值,类似between...and 的关系
settrange ---- 代表第几位开始替换,下脚本从零开始
从0-1表示全部

2.redis-list(单值多 value)
List(列表)
列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)它的底层实际是个链表。

1.lpush/rpush/lrange

lpush/rpush/llrange ---- 从左/从右/获取指定长度
lpush list01 1 2 3 4 5 倒叙排序
rpush list02 1 2 3 4 5 正序排序
lrange list01 0 -1 获取list01 中的所有值

2.lpop/rpop

1.lpop/rpop ---- 移除最左/最右
2.lpop list01 删除元素5
3.rpop list01 删除元素1

3.lindex,按照索引下标获得元素(从上到下)

lrange list01 0-1
lindex list01 1

4.lien,求列表长度

lien list01

5.lrem key

删 N个 value
lrem list01 2 1 在list01 中删除2个1

6.ltrim key

ltrim ---- 开始 index 结束 index,获取指定范围的值后在赋值给key
ltrim list01 0 2 截取list01 从0到2的数据在赋值给list01

7.rpoplpush list1 list2 将 list1中最后一个压入list2中的第一个

lrange list01 0 -1
lrange list02 0 -1
rpoplpush list1 list2

8.lset key index value

lset list01 0 x 将list02中第一位换成x

9.linsert key before/after

linsert list01b before x php 在x之前加字段php

3.redis-Hash

hash 是一个键值对集合

hash 是一个string类型的field和value的映射表,hash特别适合存储对象。
1.hset/hget/hmset/hmget/hgetall/hdel

设值/取值/设值多个值/取多个值/取全部值/删除值
hset user id 11
hget user id
hmset customer id 11 name yuan age 26
hmget customer id name age  只返回相应的值
hgetall customer 返回全部
hdel user id 删除 id

2.hlen

求哈希长度
hlen customer

3.hexists key

hexists ---- 在key里面的某个值
存在返回1,不存在返回0

4.hkeys/havls

hkeys students
havls students

4.redis -set(不重复的)

Set(集合)
set是 string类型的无序集合

1.sadd/smembers/sismember

sadd/smembers/sismember ----添加/查看集合/查看是否存在

sadd set01 1 2 2 3 3 去掉重复添加
smembers set 01 得到set01
sismember set01 1 如果存在返回1  不存在返回0

2.scard

scard ---- 获取集合里面的元素个数
scard set01

3.srem key value

srem ---- 删除集合中元素
srem set01 3
SMEMBERS set01 3已经被删除掉

4.srandmember key

srandmembe ---- 随机出几个数
sadd set02 1 2 3 4 5 6 7 8
srandmember set02 2

5.spop key

spop ----随机出栈
spop set01

6.smove key1 key2

sadd set03 x y z
smove set01 set03 2 将set01 中的2 移动到 set03中

7.数学集合类

sadd set01 1 2 3 4 5
sadd set02 1 2 3 a b
差集
SDIFF set01 set02 返回 4 5 在第一个set 中不在第二个set 中
交集
SINTER set set02  返回 1 2 3
并集
SUNION set01 set02 返回 set01 set02 中的值 去掉重复

5.redis-Zset
Zset(有序集合)

1.zadd/zrange

zadd zset01 60 v1 70 v2 80 v3 90 v4100  v5
zrange zset01 0 -1
带分数返回 withscores

2.zrangebyscore key start end

zrangebyscore key start end ----根据开始结束来取值
zrangebyscore zset01 60 70

zrangebyscore zset01 60 (90  表示不包含90)

zrangebyscore zset01  60  90 limit 1 2 从第一个开始截取2 条

3.zrem key

zcard  求zset01 总条数
zcount zset01  60  90  求60-90个数
zrank  zset01  v2   返回1  返回对应下角标,从0开始
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值