#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"