53-Redis介绍

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的主要作用:快速存取

Redis应用场景

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

Redis怎么用?

官网地址:https://redis.io/
命令地址:http://doc.redisfans.com/
应用版本:3.0.4
Redis的五大数据类型以及应用场景
string/list/set/hash/zset

Redis的安装

sudo apt-get install redis-server

查看帮助命令
redis-server --help

编辑Redis配置文件
sudo vim /etc/redis/redis.conf
将daemonize no改为 daemonize yes保存退出

启动
redis-server
后台启动
redis-server &

打开服务
sudo service redis start

关闭服务
sudo service redis stop

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数据库简单使用

redis是分布式的内存数据库

/usr/bin/redis-benchmark文件可以测试机器性能

redis读取速度每秒能达到10W左右

切换数据库 select 数据库号

DBSIZE      查看当前数据库的key数量
keys *      查看key的内容
FLUSHDB     清空当前数据库的key的数量
FLUSHALL    清空所有库的key(慎用)
exists key   判断key是否存在 

redis常用五大数据类型

redis-key
1.key * 查看所有key
2.exists  key 的名字   判断key是否存在  
如果存在返回1  不存在返回0  
命令:exists k1
3.move key db  当前库没有了  被移除了  移动到指定库中
命令:move k1 2      移动k1  到2号库
4.expire key  秒数   过多少秒删除
5.ttl    time to live  -1表示永不过期   -2表示已过期 
命令:ttl k1   
6.type key 查看你的key是什么类型
命令:type k1  返回 string

1.redis-string

1.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  ----- 制定减少多少

set k1 26
incr  k1  返回27   递增加1
decr  k1  返回26   递减减1
incrby  k1  2   返回28
decrby  k1  2  返回26

set  k3 v3  
incr k3   会报错!!增加不能增加字符串

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

set k1 juran123
getrange   k1  0   -1       返回 "juran123"
getrange   k1  0   2        返回  jur
setrange   k1  0   xxx      返回    "xxxan123"      

2.redis-list(单值多value)

List(列表)

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

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

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

3.lindex,按照索引下标获得元素(从上到下)
lrange list01 0 -1
lindex list01 1

4.llen,求列表长度
llen 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是一个键值对集合

hash是一个string类型的field和value的映射表,hash特别适合存储对象

KV模式不变,但V是一个键值对
1.hset/hget/hmset/hmget/hgetall/hdel
设值/取值/设值多个值/取多个值/取全部值/删除值
hset user id 11
hget user id 
hmset customer id 11 name juran 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/hvals
hkeys students
hvals students

5.hincrby/hincrbyfloat
小数

4.redis-set(不重复的)

Set(集合)

set是string类型的无序集合

1.sadd/smembers/sismember
sadd/smembers/sismember ---- 添加/查看集合/查看是否存在
sadd set01 1 2 2 3 3  去掉重复添加
smembers set01   得到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 set01 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 v4 100 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 
zrem key value---- 某score下对应的value值,作用是删除元素
zrem zset01 v1  

4.zcard/zcount key score 区间/zrank key values
zcard   求zset01 总条数
zcount  zset01 60 90  求60-90个数
zrank   zset01  v2   返回1  返回对应下角标,从0开始
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,902评论 2 27
  • Nosql概述 在介绍Redis之前,首先先要介绍Nosql的概念。 互联网架构发展 在90年代的时候,计算机访问...
    COKIDCC阅读 663评论 0 1
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,171评论 0 36
  • Redis是啥 Redis是一个开源的key-value存储系统,由于拥有丰富的数据结构,又被其作者戏称为数据结构...
    一凡呀阅读 1,155评论 0 5
  • 最近华为出了这些大事,心里还是很关心的,八国联军戳着脊梁骨要他投降,华为却没认怂,腰板却还挺得直直的。 论起来,我...
    翻小白阅读 366评论 0 0