目录
1. Redis基本介绍
-
数据库的发展
-
Redis介绍与安装
2. Redis的使用
-
Redis基本命令
-
Redis常用数据类型
*3. Redis主从配置
课堂笔记
1. Redis基本介绍
1.1 数据库的发展
- 单实例数据库:主要在互联网+大数据来临前,一些企业内部使用单实例数据库就能满足系统要求;
- 缓存(memcache)+单实例数据库:使用缓存,提升数据的读取速率;
- 缓存+主从数据库+读写分离:降低数据库的读取压力;
- 缓存+主从数据库集群+读写分离+分库分表:降低数据写入的压力;
- nosql+主从数据库集群+读写分离+分库分表:支持对数据的并发性、高效性以及不固定格式数据的存取。
1.2 Redis介绍与安装
-
Redis,由C语言开发的、开源的、高性能的,以键值对形式存储数据的非关系型(NoSQL)数据库。
-
SQL与NoSQL数据库:
- SQL数据库:关系性数据库,数据存储在表中,表中的数据具有固定格式,要求数据具有一致性。
- Oracle、MySQL、SQL server
- NoSQL数据库(not only sql):以键值对方式存储的非关系型数据库,支持高并发,数据格式不固定等特点,主要用于快速存取,如双十一秒杀。
- Redis、MongoDB、Hbase Hadoop
- SQL数据库:关系性数据库,数据存储在表中,表中的数据具有固定格式,要求数据具有一致性。
-
Redis特性
- Redis支持持久化,可以将内存数据保存到磁盘中,可进行重复使用;
- Redis除支持key-value数据类型外,还支持list、set等多种数据类型;
- Redis支持数据备份。
-
Redis使用场景
- 点赞/秒杀/直播平台的在线好友列表/商品排行榜/单点登录
-
Redis-Windows下载:https://github.com/microsoftarchive/redis/releases
2. Redis的使用
2.1 Redis基本命令
-
Linux下安装Redis-5.0.9
wget http://download.redis.io/releases/redis-5.0.9.tar.gz -- 下载安装包 tar xzf redis-5.0.9.tar.gz -- 解压安装包 cd redis-5.0.9/ -- 进入redis目录 sudo apt install make sudo apt install make-guile -- 安装make相关指令 sudo apt-get insatll gcc -- 安装gcc,Redis源码为c语言 make -- 源码编译 ''' E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it? ''' -- 升级所占用中,解决方法 sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock
-
结束进程
kill -9 进程id sudo kill 进程id
-
查看Redis帮助
redis-server --help -- 查看Redis服务 redis-cli --help -- 查看Redis客户端
-
启动Redis服务
-- windows环境下 redis-server.exe -- 启动Redis服务 redis-cli.exe -- 启动Redis客户端 -- Linux环境下 redis-server -- 启动Redis服务 redis-cli -- 启动Redis客户端
-
重启Redis服务
sudo service redis-server restart
-
编辑Redis配置文件
sudo vim /etc/redis/redis.conf
-
查看Redis类型详细信息
help @类型
-
查看当前数据库的数量
dbsize -- Redis默认最大支持16个数据库
-
查看所有键值信息
keys * -- 打印所有的键
-
清空数据库的所有键值
flushdb -- 清空当前数据库的键值 flushall -- 清空所有数据库的键值
-
判断某个key是否存在
exitsts key
-
使用config查看Redis文件配置参数
config get 参数名称 -- 如config get port,查看端口号
-
Redis更多命令查看:http://doc.redisfans.com/
2.2 Redis常用数据类型
-
redis-string类型
-
Redis的最基本类型,一个key对应一个value;
-
string类型可以包含任意数据,最大不超过512MB;
-
常用方法
-
set/get/del/append/strlen
set key value -- 为key设置值value get key -- 获取key的值 mset key1 value1 key2 value2.. -- 为多个key同时设置值 mget key1 key2... -- 同时获取多个key的值 append key value -- 为key字段追加值value strlen key -- 获取key的值长度
-
incr/decr/incrby/decrby
incr key -- 执行key的值+=1运算 decr key -- 执行key的值-=1运算 incrby key value -- 执行key的值+=value运算 decrby key value -- 执行key的值-=value运算
-
getrange/setrange
getrange key start end -- 获取key的值[start, end]区间的字符串 setrange key start value -- 对key的值从start位置开始替换成value
-
expire/setex
expire key sec -- 为key设置有效时长,超过时间后key自动删除,key值必须存在 setex key sec value -- 与expire类似,不过不需要key值存在,会创建key-value
-
-
应用:
incr
函数可以实现点赞;expire
函数可以实现验证码的超时设置。
-
-
redis-list类型(单值多value)
-
list为简单的字符串列表,可以添加元素到表头或表尾,实质是列表。
-
常用方法
-
lpush/rpush/lrange
lpush key value1 value2.. -- 从左向右插入序列,与栈相同 rpush key value1 value2.. -- 从右向左插入序列,与队列相同 lrange key start end -- 获取key的值在[start, end]范围内元素
-
lpop/rpop
lpop key -- 从左删除key的值 rpop key -- 从右删除key的值
-
lindex 从左向右按照索引获取元素
lindex key index -- 获取key的下标为index的值
-
llen 获取列表长度
llen key -- 获取key的长度
-
lrem 删除元素
lrem key n value -- 删除key中n个value值
-
ltrim 截取范围内的值并赋值
ltrim key start end -- 截取key[start, end]区间的值并赋值给key
-
rpoplpush list1 list2
rpoplpush key1 key2 -- 从key1右边取一个值添加到key2的左边
-
lset key index value
lset key index value -- 将key中下标为index的值换成value
-
insert key before/after
insert key before/after ele s -- 在key中的ele元素前/后添加s
-
-
应用:
- Redis的单key多value可以用于记录客户购物清单;
- 可以用
ltrim
实现浏览记录的更新。
-
-
redis-hash类型
-
hash为一个键值对的集合,适合于存储对象。
-
常用方法
-
hset/hget/hmset/hmget/hgetall/hdel
hset field key value -- 为field下的key设置值为value hget field key -- 获取field下的key的值 hmset field key1 value key2 value1 -- 为field下的多个key设置值 hmget field key1 key2 -- 获取field下的多个key的值 hgetall field -- 获取field下的所有key及值 hdel field key -- 删除field下的key
-
hlen 求哈希长度
hlen field -- 获取field下的key数量
-
hexits 判断某值是否存在
hexits field key -- 判断field下的key是否存在
-
hkeys/hvals
hkeys field -- 获取field下的所有key hvals field -- 获取field下的所有value
-
-
应用:
- hash的
key:{field:value...}
可以实现对各种信息(多属性)的记录。
- hash的
-
-
redis-set(无重复值)
-
set是string类型的无序集合。
-
常用方法
-
sadd/smembers/sismember
sadd set value1 value2.. -- 向set中添加值,自动去掉重复 smembers set -- 打印set的值 sismember set x -- 判断x是否是set的成员
-
scard 获取集合长度
scard set -- 获取set中元素个数
-
srem 删除元素
srem set x -- 删除set中的x
-
srandmember/spop 随机获取成员
srandmember set n -- 随机在set中获取n个数 spop set -- 随机在set中弹出一个数
-
smove 移动元素
smove set1 set2 x -- 将set中的x移动到set2中
-
集合运算
sdiff set1 set2 -- 计算set1与set2的差集 sinter set1 set2 -- 计算set1与set2的交集 sunion set1 set2 -- 计算set1与set2的并集
-
-
应用:
srandmember
可以实现随机抽奖。
-
-
redis-Zset类型(有序集合)
-
常用方法
-
zadd/zrange
zadd zset key1 value1 key2 value2.. -- 向zset中添加key-value,自动按key排序,key为float类型 zrange zset start end [withscores] -- 获取zset[start, end]区间的值
-
zrangebyscore 获取范围内的值
zrangebyscore zset start end [limit a b] -- 获取zset中key在[start, end]中的值,取第[a, b]条
-
zrem 删除元素
zrem zset key -- 删除zset中的key
-
zcard/zcount/zrank
zcard zset -- 求zset中k-v的条数 zcount zset start end -- 求zset中区间在[start, end]间的条数 zrank zset v -- 返回zset中v的下标,从0开始
-
-
应用:
- 集合按照key值进行排序,可以对成绩进行排序;
- Zset支持区间操作,可以获取某一区间详细信息。
-
3. *Redis主从配置
-
一个master可以拥有多个slave,而每个slave同时又可以拥有多个slave,如此就形成了庞大的多级服务器架构。
-
master用于写数据,而slave用于读取数据,实际上网站的读写比例一般为10:1,因此通过主从配置可以实现读写分离。
-
master和slave都是一个redis实例(redis服务)。
-
主从配置命令
主配置
-
修改redis.conf文件
bind 0.0.0.0 -- 可以是0.0.0.0或主机ip
-
开启主服务
src/redis-server redis.conf
从配置
-
复制redis下的redis.conf文件
cp redis.conf slave.conf
-
修改slave.conf文件
bind 192.168.50.128 -- 绑定主机ip replicaof 192.168.50.128 6379 port 6378 -- 设置端口,不能和redis.conf的port相同
-
开启从服务
src/redis-server slave.conf
数据操作
-
查看主从关系
src/redis-cli -h 192.168.50.128 info Replication
-
进入主客户端
src/redis-cli -h 192.168.50.128 -p 6379 -- 这里可以不指定主机ip
-
进入从客户端
src/redis-cli -h 192.168.50.128 -p 6378 -- 这里必须指定主机ip,否则报错
-
在主客户端向数据库写入
hmset user id a1 name amateur age 18
-
在从客户端向数据库写入(从客户端只拥有读取权限)
hset cust id a1 -- (error) READONLY You can't write against a read only replica.
-