Redis 安装和数据类型
一、Redis
1、Redis概念
redis 缓存中间件:缓存数据库
nginx web服务
php 转发动态请求
tomcat web页面,也可以转发动态请求
springboot 自带tomcat
数据库不支持高并发,一旦访问量激增,数据库很快就会崩溃
redis的作用:缓存数据库
redis也是一个数据库,不单是一个缓存工具,
redis非关系型数据库,nosql=not only sql 不仅仅是sql
键值对形式
key value
test1=test2
test1=10 数据的类型不是定义好的类型,根据自定义,系统自动识别
test1=10 string
2、Redis简介
redis:远程字典服务器
键值对、开源的、C语言写的nosql数据库
redis基于内存运行,所有的数据不是保存在硬盘,而是内存
持久化————定期或者人为的把数据保存到硬盘
3、Redis的优点
1、极高的读写速度,读速度可以达到110000次/s,81000次/s
2、支持丰富的数据类型,键值对可以定义多种数据类型 string、list、hash、set
3、支持数据持久化,内存当中数据保存到磁盘
4、原子性,redis的所有操作都是原子性的
5、支持主从模式和高可用模式(哨兵模式),以及集群
缓存雪崩、缓存击穿???
4、应用场景
redis基于内存运行的数据库,缓存是他最常用的应用场景
排行榜、计数器、存储关系、实时分析记录、日志系统
6、Redis缓存
缓存是一种用于存储临时数据副本的技术,目的就是提高访问速度和性能
缓存通常位于数据的访问路径上,数据的必经之路,可以不直接访问原始数据的情况下,可以直接获取数据
缓存的应用场景:
web缓存、数据库缓存、对象缓存(大数据应用)
二、Redis安装部署
安装部署redis
systemctl stop firewalld
setenforce 0
cd /opt # 把包拖进来
安装redis的依赖环境
yum install -y gcc-c++ make
tar -xf redis-5.0.7.tar.gz
cd redis-5.0.7
make -j 4
make PREFIX=/usr/local/redis install
cd utils
./install_server.sh
# 默认端口6379
# 注意默认6379后的Please select the redis executable path []
/usr/local/redis/bin/redis-server
# Is this ok? Then press ENTER to go on or Ctrl-C to abort.
按回车 # Installation successful! 表示成功
ln -s /usr/localredis/bin/* /usr/local/bin
netstat -antp | grep 6379
vim /etc/redis/6379.conf
set nu
70行 bind后增加 本机地址192.168.100.11
93行 默认不动(port 6379)
137行 默认不动(daemonize yes)
159行 默认不动(pidfile /var/run/redis_6379.pid)
172行 默认不动(logfile /var/log/redis_6379.log)
wq!
/etc/init.d/redis_6379 restart
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 status
tail -f /var/log/redis_6379.log
# 进入redis的命令
redis-cli -h 192.168.100.11 -p 6379
三、Redis数据库
# 进入redis的命令
redis-cli -h 192.168.100.11 -p 6379
-h 指定ip地址
-p 指定端口
-a 密码(没有密码可以不加)
redis-cli 命令行工具
redis-server start stop restart 控制redis的服务状态
redis-benchmark 检查redis的运行效率
redis-check-aof 修复aof持久化的文件
redis-check-rdb 修复rdb持久化的文件
redis-benchmark -h 192.168.100.11 -p 6379 -c 100 -n 10000
# 向redis的主机模拟发送100个并发链接,同时发送十万个请求
redis-benchmark -h 192.168.100.11 -p 6379 -q -d 100
# 模拟存储100个数据包的性能测试
1、Redis数据类型
命令 | 类型 |
---|---|
string | 字符串 |
list | 列表 |
hash | 散列,键值对集合 |
set | 集合 不重复的无序集合 |
zset | 集合 有序集合 |
2、Redis的常用命令
redis-cli -h 192.168.100.11 -p 6379
# 创建键值对
set 键名 数值
# 获取键值对的数值
get 健名
# 查看当前数据库有多少键值对
keys *
# 查看库当中键值对是否存在
exists 键名
# 存在返回1,不存在返回0
# 查看键值的类型
type 键名
# 如何删除键值对
del 键名
# 返回1删除1个 返回2删除2个 可以同时删除多个
# 修改键的名字
rename 旧名 新名
# 如何给redis添加密码
config set requirepass 123456
# 添加密码
auth 123456
# 密码登录
config get requirepass
auth 123456
3、Redis数据类型操作
3.1 string类型
是redis的基础类型,最大能够存储512MB的数据(数字、图片等待默认都是string)
append
# 追加
如何该键不存在,自动添加打印键值长度,该键存在,对已有键进行追加,并显示长度
strlen 名字 # 获取值的长度
incr 名字 # 值追加1
decr 名字 # 值减少1
incrby 名字 数值 # 指定加多少
decrby 名字 数值 数值 # 指定减多少
# 增加生命周期
setex 名 时间(秒) 值
# 查看生命周期
ttl 名
# 查看库里面的键值对有几个
dbsize
# 查看Redis有多少个库
config get databases
# 第一个库是零,每一个库都是独立的,互相不影响
# 换库
select 序列号
# 数据迁移(移库)
move 名 序列号
# 清空库 和 # 清空所有的库 !!!慎用!!!
flushdb 和 flushall
# 如何一次创建多个键值对
mset 键名1 数值 键名2 数值 键名3 数值
#一次性查看多个键值对 mget
mget 键名1 键名2 键名3 键名4
3.2 list类型
列表类型
# 创建list类型
lpush 名 值
lpush mykey a b c d
# 查看数值
lrange 名 0 -1
# 0是起始位。-1是列表当中的最后一位 #显示从右往左
lrange 名 0 2
# 起始位向后移两位 # 数字表示索引,即代表索引位置
# 怎么在列表里面添加元素
lpush 键名 数值
# 移除数据
lpop 名 # 从右往左移除数据
# 查看键名有多少个元素
llen 名
# 指定删除
lrem 名 数字 数值 # 数字表示要删除几个
# 如何用索引的方式打印指定的位置(数字表示位置、从右往左)
lindex 名 数字
# 根据索引的位置对指定位置进行替换
lset 名 数字 数值
# 把数字的位置的数值替换成数值
# 怎么在指定值的前后进行替换
linsert 名 before 数值1 数值2
# 在数值1的前面插入数值2
linsert 名 after 数值1 数值2
# 在数值1的后面插入数值2
# 创建数值对 从左往右
rpush 名 数值
lpush mykey a b c d
# 移除从右往左
rpop 名
3.3 hash类型
hash类型:散列,用来存储对象,把对象类别和ID构成键名
hash类型存储的空间很小,占用的内存和持久化后磁盘空间都很少
hash是一个键值对,包含多个对象个对象的值
myhash就是一个hash值,一个hash值可以存储4294967295个键对值
# 创建hash类型的键
hset 名 对象名 数值
hset myhash id1 1 id2 2 id3 3
# 获取id值
hget myhash id
# 查看hash的键对值有几个
hlen myhash
# 删除 #只能一个一个删,键名后面必须要加对象
hdel myhash id
# 创建多个
hmset myhash id1 1 id2 1
# 获取多个值
hmget mhash id1 id2
# 查看所有键值对和里面数值
hgetall myhash
# 只看键对名
hkeys myhash
# 只看键值对里面的数值
hvals myhash
# 添加键值对和数值
hsetnx myhash id4 4
3.4 set类型
set集合:无序集合,元素的类型只能是string,在无序集合当中,元素具有唯一性,不允许重复
应用场景:可以用set的数据来追踪唯一性的数据,比如:IP地址。或者根据客户的ip区分不同客户购买的同一产品
# 创建键值对
sadd myset a b b c
# 查看
smembers myset
# 添加 # 表中存在的不添加,实际添加数会显示
sadd myset a d e
# 查看集合当中的元素有几个
scard myset
# 从当前集合随机获取一个值
srandmember myset
# 随机删除集合当中任意值
spop myset
# 删除指定值
srem myset a
srem myset b c
# 把myset当中的a移动到myset2当中
smove myset myset2 a
3.5 zset类型
zset集合:有序集合,sorted set,元素类型都是string,元素唯一,不能重复,每个元素都会关联一个double类型的分数score(表示权重),通过权重的大小进行排序,权重可以相同
# 创建
zadd myzet 1 "one"
zadd myzet 2 "two" 3 "three"
# 查看成员 # one two three
zrange myzet 0 -1
# 查看成员,按照权重大小进行排序 # 权重 1 2 3
zrange myzet 0 -1 withscores
# 权重值可以相同,但是成员不可以相同
# 获取权重的范围是大于等于2小于等于5 # 展示结果是成员
zrangebyscore myzet 2 5
# 排序 # 索引倒序
zrevrange myzet 1 3
3.6 数据类型总结
string 基本类型
list 列表
hash 一个hash可以存储多个对象和对象值,对象名不可重复
set 无序集合 没有重复 没有权限 string
ash
创建
zadd myzet 1 “one”
zadd myzet 2 “two” 3 “three”
查看成员 # one two three
zrange myzet 0 -1
查看成员,按照权重大小进行排序 # 权重 1 2 3
zrange myzet 0 -1 withscores
权重值可以相同,但是成员不可以相同
获取权重的范围是大于等于2小于等于5 # 展示结果是成员
zrangebyscore myzet 2 5
排序 # 索引倒序
zrevrange myzet 1 3
### 3.6 数据类型总结
string 基本类型
list 列表
hash 一个hash可以存储多个对象和对象值,对象名不可重复
set 无序集合 没有重复 没有权限 string
zset 有序集合 没有重复 按照权重进行排序 string