redis视频教程学习笔记(一)

#author:2UU

#date:2018/8/28

#该笔记来自学习bilibili网站黑马程序员Redis视频教学,一边学习一边记录希望印象更深刻

#本章主要内容:redis介绍以及安装,redis的key的介绍和操作,redis数据类型string,list,set,的介绍和操作,其他知识点将在下章更新

从网站的开发谈到数据库的选择,使用

mysql数据库:数据以文件形式存储在硬盘里

运行速度:CPU > 内存 > 硬盘

网站开发好后的瓶颈:

带宽?访问流量大,这个问题easy              数据库?排序(算法支撑)

同一数据被很多用户访问,访问量很大的情况下,会造成负载过重,如何降低负载

什么是redis?

redis数据库: 内存高速缓存数据库 ,  c语言开发 ,数据模型为 key-value;支持丰富的数据类string,  hash ,list ,set ,sorted set;可持久化(数据可备份在硬盘中),保证了数据的安全;意大利人开发的

缓存:有两种类型:数据缓存 、 页面缓存(静态化技术、smarty)

例子:网页的新闻信息发布后内容基本上不会变更,适合页面缓存网页有动态信息推广

页面需要更新,适合分区做缓存,变化的部分采用数据缓存redis使用缓存减轻数据库的

负载数据缓存:通过某一介质提供用户对数据更快的读取速度,降低负载的行为,这些介质可以是文件、数据库、内存,内存常用于数据缓存

页面缓存经常用在CMS内存管理系统里

数据缓存经常用在页面的具体数据里

memcache 和 redis比较

redis 单个value的最大限制是1GB, memcache只能保存1MB数据

redis的安装安装

redis之前我已经在VMware中安装好了centos7 

源码安装,下载好源码后,只需要make一下就可以用了,开发时没开发冗余代码, 精简型的

安装过程:1.官网下载redis源码压缩包,如redis-4.0.11.tar.gz     

  2.使用WinSCP工具把压缩包通过远程连接的方式传输到linux系统上     

  3.通过远程登录putty工具登录到linux系统,进入到存放redis压缩包的所在目录,我放在/home目录下 命令如下 cd /home     

  4.解压缩 tar -zxvf redis-4.0.11.tar.gz ,生成 redis-4.0.11文件夹     

    5.进入到解压文件进行编译 cd /home/redis-4.0.11 

make 完成编译后可用通过ls命令查看redis-4.0.11文件夹中的内容

在目录/home/redis-4.0.11/src下,标绿的文件为可执行文件,有如下 redis-benchmark  压力测试文件

redis-check-aof  检测备份文件脚本

redis-sentinel

mkreleasehdr.sh

redis-check-rdb 

redis-server 启动redis服务脚本文件

redis-cli  终端操作脚本   

redis-trib.rb

为了方便管理,创建一个redis运行目录 mkdir /usr/local/redis

拷贝两个文件到其目录 cp redis-server redis-cli /usr/local/redis

并拷贝其配置文件到其运行目录,配置文件的位置在redis-4.0.11中  cp redis.conf /usr/local/redis

启动redis

服务可以使用相对路径启动,需要进入到redis-server所在目录

1. cd /usr/local/redis 

2.  ./redis-server

启动后看到一个启动成功的界面

redis默认的启动方式是前端方式,会占用所用终端,不方便操作,所以,最好采用后台方式启动

如何后台启动,通过修改配置文件redis.conf 中的内容

1.使用编辑器vim打开redis.conf  vim redis.conf

2.找到文件中daemonize的位置,把跟在后面的no改为yes,并保存 (如果不会使用编辑器,可百度其使用方法)输入冒号,进入命令模式,输入/daemonize,按下enter键,定位daemonize位置,进入编辑模式,修改no为yes,按下ESC键,切换到进入模式,输入冒号,进入命令模式,在冒号后面输入wq并按enter键为保存修改内容

重新启动redis服务,并采用后台的方式运行,要带上配置文件

1.  cd /usr/local/redis

2.  ./redis-server /home/redis/redis.conf

要操作redis服务端,需要通过redis客户端来对其操作

启动redis客户端:

1. cd /usr/local/redis

2. ./ redis-cli

启动成功后在命令行中输入ping命令可以检测redis服务端是否成功运行,还可以进行其他操作

如:设置变量

set name tom

set age 21

set addr beijing

这些变量都存储在内存中

读取变量

get name

get age

get addr

可以输出对应的值

redis 具体使用

一、key

1.key命名:key名字除了/n和空格不能作为名字组成的部分,其他大部分字符都可以用,其长度没有限制

redis默认端口是6379,来源于一个意大利女歌手的名字,八卦创建redis作者喜欢她

命名注意事项:key名最好不要太长,占内存,查询慢

2.key操作

2.1 exists key 查看key是否存在,返回1为存在,返回0为不存在

2.2 type key  查看key值类型,类型有string,hash,list,set,sorted set

2.3 keys * 查看所有的key名,可以灵活应用 keys *e,会显示以e结尾的键名

2.4 rename oldkey newkey 更改键名

2.5 expire key seconds 指定当前key的过期时间,超过该时间就会被清空

2.6 dbsize 返回当前数据库的key的数量

2.7 del key1 key2 ... 删除指定的key

2.8 ttl key 返回key的剩余过期秒数

2.9 select db-index 选择数据库

2.10 move key db-index 将key从当前数据库移到指定数据库

2.11 flushdb 删除当前数据库中的所有key

2.12 flushall 删除所有数据库中的所有key 

不同数据库的切换: 默认共16个数据库,标号为0到15,默认操作的数据库为标号为0的数据库,通过select命令来切换 

二、数据类型string

1.string介绍: string 是 redis 最基本的类型,redis的string可以包含任何数据,包括JPG图片(存储的是其二进制码)或者序列化对象,单个value的最大值为1G字节,如果只用string类型,redis可以看成是加上持久化特性的memcache

2.string操作

2.1 set key value 设置key对应值为string类型的value

2.2 mset key1 value1 key2 value2 ... keyN valueN 一次性设置多个key的值

2.3 mget key1 key2 ... key3 一次性获取多个key的值

2.4 incr key  对key的值做加加操作,并返回新的值(累加1操作,可以对新key和已有key操作,新key时,创建该key并累加1,其值为1,;针对已有key进行操作时,key值必须为整型)

2.5 decr key  同上,减减操作(累减1操作,操作模式与incr相同)

2.6 incrby key  integer 加指定值

2.7 decrby key  integer 减指定值

2.8 append key value  给指定key的字符串追加value2.9 substr key start end 返回截取过的key的字符串,对内容进行截取,包括start和end标记位置内容

例子

set color redandyellow

substr color 4 5

显示内容为 and

三、数据类型list

1.list(链表)介绍

List是一个双向链表,通过push或者pop操作从链表的头部或者尾部添加删除元素list既可以作栈(先进后出),也可以用作队列(先进先出)

应用场合:获得最新的10个登录用户信息 sql实现的话数据多的时候对数据库的负载比较高,关键字段还有要设置索引,耗费系统资源         

用list实现,在链表中只保留10个数据,新的进来,旧的就踢出,节省资源

2.List操作

2.1 lpush key string 在key对应list的头部添加字符串元素

2.2 rpop key 从list尾部删除元素,并返回删除元素

2.3 llen key  对应list的长度,key不存在返回0,如果key对应的类型不是list,返回错误

2.4 lrange key start end 返回指定区间内的元素,下标从0开始

2.5 rpush key string 在尾部添加

2.6 lpop key 从list的头部删除元素,并返回删除元素

2.7 ltrim key start end 截取list,保留指定区间内元素

例子: 通过List保存最新的5个登录用户信息设置一个list链表,内部有五个元素

lpush newlogin tom

lpush newlogin mary 

lpush newlogin linken

lpush newlogin xiaoming

lpush newlogin jack

添加新元素xiaoli 删除旧元素tom  lpush newlogin xiaoli

rpop newlogin

该链表每增加一个新元素,就删除一个就元素 查看list中的元素lrange newlogin 0 4 (0 100 显示一样的内容)显示内容:xiaoli jack xiaoming linken mary

ltrim newlogin 1 3 lrange newlogin 0 4 里面就只保留了对应的三个元素 显示内容:ack xiaoming linken

四、数据类型set

1.set介绍

set类型是string的无序集合set元素最大可以包含(2的32次方-1)个元素可以进行添加删除操作,还包括并集、交集、差集操作,这些操作可以很容易实现sns好友推荐功能

注意:每个集合同的元素不能重复

应用场景:QQ好友推荐

2.set操作

2.1 sadd key member 添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中,返回0,key对应的set不存在返回错误

2.2 srem key member [member] 从key对应set中移除给定元素,成功返回1

2.3 smove p1 p2 member 从p1对应set中移除member 并添加到p2对应set中

2.4 scard key 返回set的元素个数

2.5 sismember key member 判断成员是否在set中,1为真,0为假

2.6 sinter key1 key2 ... keyN 返回所有给定key的交集(intersection)

2.7 sunion key1 key2 ... keyN 返回所有给定key的并集(union)

2.8 sdiff  key1 key2 ... keyN 返回所有给定key的差集(difference)

2.9 smembers key 返回key对应set所有元素,结果是无序的

例子:统计tom朋友圈和linken朋友圈的交集

创建tomFri的set集合类型,内部有5个数据:

127.0.0.1:6379[1]> sadd tomFri mary

(integer)1

127.0.0.1:6379[1]> sadd tomFri jack

(integer)1

127.0.0.1:6379[1]> sadd tomFri xiaoming(integer)

1127.0.0.1:6379[1]> sadd tomFri wang5

(integer) 1

127.0.0.1:6379[1]> sadd tomFri wang6

(integer) 1

创建linkenFri的set集合类型,内部有5个数据:

127.0.0.1:6379[1]> sadd linkenFri yuehan

(integer) 1

127.0.0.1:6379[1]> sadd linkenFri daxiong

(integer) 1

127.0.0.1:6379[1]> sadd linkenFri luce

(integer) 1

127.0.0.1:6379[1]> sadd linkenFri wang5

(integer) 1

127.0.0.1:6379[1]> sadd linkenFri wang6

查看这两个集合的交集

127.0.0.1:6379[1]> sinter tomFri linkenFri1) "wang5"2) "wang6"

查看这两个集合的并集127.0.0.1:6379[1]> sunion tomFri linkenFri1) "xiaoming"2) "mary"3) "wang6"4) "daxiong"5) "wang5"6) "luce"7) "yuehan"8) "jack"

两个集合互取差集

只有tomFri,没有linkenFri

127.0.0.1:6379[1]> sdiff tomFri linkenFri1) "xiaoming"2) "mary"3) "jack"

只有linkenFri,没有tomFri

127.0.0.1:6379[1]> sdiff linkenFri tomFri1) "daxiong"2) "luce"3) "yuehan"

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

推荐阅读更多精彩内容