1.Redis概述
- Redis是什么
- 安装Redis
- Redis数据类型(重点)
- Redis哪些应用
- Python操作Redis(重点)
- Redis主从
1.1 Redis是什么
- NoSQL数据库 非关系型数据库
- 保存在内存中,速度超快
- key Value
- 八种数据类型 常用的有物种数据类型
- 单个Key最大支持到512M
- Redis有0~15号库,也就是说16个库,默认0号库
- 端口号:6379
1.2 Linux软件安装方式
- dpkg安装:类似于Windows QQ安装下载一个exe的软件,下一步即可,。缺点:有依赖关系,必须严格安装顺序来安装
- apt-get -y install 自动安装 非常的方便 需要什么自己去下载 完全不用管 -y表示不用确认 直接安装
- 编译安装 源码安装 麻烦 但是性能优于 apt-get安装 用c 和 c++ 开发
1.3 安装Redis
yum -y install gcc automake autoconf libtool make
wget -c http://download.redis.io/releases/redis-5.0.5.tar.gz
tar -zxvf redis-5.0.5.tar.gz
pwd
mkdir /usr/local/redis
mv redis-5.0.5 /usr/local/redis/
cd /usr/local/redis/redis-5.0.5
make
[root@localhost redis-5.0.5]
cd src && make install
make[1]: Entering directory `/usr/local/redis/redis-5.0.5/src'
CC Makefile.dep
make[1]: Leaving directory `/usr/local/redis/redis-5.0.5/src'
make[1]: Entering directory `/usr/local/redis/redis-5.0.5/src'
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory `/usr/local/redis/redis-5.0.5/src'
1.4 文件释义
[admin@localhost ~]$ cd /usr/local/redis/redis-5.0.5/src/
文件名 | 说明 |
---|
redis-server | redis服务器启动脚本 |
redis-cli | redis客户端脚本 |
redis-sentinel | 哨兵服务器 redis 2.0以后才有的 |
redis-check-aof | aof修复工具 redis持久化 |
redis-check-rdb | rdb修复工具 redis持久化 |
redis-benchmark | 性能测试工具 |
1.5 Liunx Redis启动
[admin@localhost ~]$ /usr/local/redis/redis-5.0.5/src/redis-server
[admin@localhost ~]$ vim /usr/local/redis/redis-5.0.5/redis.conf
:set nu
protected-mode no
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
dir /var/redis/6379
然后执行命令:
chkconfig redis_6379 on
通过上面的操作后,我们就可以通过 如下命令启动,停止redis了
service redis_6379 start
service redis_6379 stop
admin@localhost ~]$ /usr/local/redis/redis-5.0.5/src/redis-server /usr/local/redis/redis-5.0.5/redis.conf
11651:C 25 Mar 2020 11:40:04.139
11651:C 25 Mar 2020 11:40:04.139
11651:C 25 Mar 2020 11:40:04.139
[admin@localhost ~]$ ps -auf | grep redis
admin 11693 0.0 0.0 112712 960 pts/3 S+ 11:43 0:00 \_ grep --color=auto redis
1.6 连接 Redis
[admin@localhost ~]$ redis-cli -h 192.168.3.230 -p 6379
192.168.3.230:6379> ping
PONG
192.168.3.230:6379>
1.7 设置取消密码
[admin@localhost ~]$ redis-cli -h 192.168.3.230 -p 6379
192.168.3.230:6379> config set requirepass 123456789
OK
192.168.3.230:6379> keys *
(error) NOAUTH Authentication required.
192.168.3.230:6379> auth 123456789
OK
192.168.3.248:6379> config set requirepass ''
OK
1.8 基础操作
192.168.3.230:6379> select 1
OK
192.168.3.230:6379> keys u*
1) "username"
192.168.3.230:6379> dbsize
(integer) 3
192.168.3.230:6379> flushdb
OK
192.168.3.230:6379> flushall
OK
1.9 数据类型
- string:字符类型最基本的数据类型
- hash:哈希缓存常用
- list:列表
- set:无序集合
- zset:有序集合
1.10 string 键值对
1.set key value # 在redis数据库中插入数据
2.get key # 根据key获取数据
3.del key # 删除指定key
4.type key # 查看key的类型
5.incr key # key必须是数字 incr 累加1
6.incrby key # 增加指定的整数值
7.decr key # 同上 累减1
8.decrby key # 累加指定值
7.incrbyfloat kye # 增加指定的值
8.ttl key # 查看key的过期时间 -1 表示永不过期
9.expire key # 设置key的过期时间
10. setex key 秒数 value # 设置value的过期时间
192.168.3.230:6379> set username kangbazi
OK
192.168.3.230:6379> type username
string
192.168.3.230:6379> get username
"kangbazi"
192.168.3.230:6379> keys *
1) "username"
192.168.3.230:6379> del username
(integer) 1
192.168.3.230:6379> set num 1
OK
192.168.3.230:6379> incr num
(integer) 2
192.168.3.230:6379> decr num
(integer) 18
192.168.3.230:6379> incrbyfloat num 12.34
"15.34"
192.168.3.230:6379> ttl num
(integer) -1
192.168.3.230:6379> EXPIRE username 10
(integer) 1
192.168.3.230:6379> TTL username
(integer) -2
192.168.3.230:6379> setex name 10 haha
OK
192.168.3.230:6379> get name
(nil)
192.168.3.230:6379> STRLEN username
(integer) 8
192.168.3.230:6379> get username
"kangbazi"
192.168.3.230:6379> append username world
(integer) 10
-----------------------------以上操作单个key-----------------------------
192.168.3.230:6379> mset name kangbazi name1 kangbazi1
OK
192.168.3.230:6379> mget name name1
1) "kangbazi"
2) "kangbazi1"
1.11 hash哈希类型(适合缓存)
- string是键值对,hash就是键值对的集合,每个hash能够存放2的32次方-1键值对
- 特别适合存放对象
- 为什么它适合缓存,一个数据表就是一个hash
user表
id name password username age sex height
1 sup 123456 zhangsan 18 0 181cm
1.hset key field value # 创建hash
2.hget key field # 去单个值
3.hkeys key # 查看所有key属性
4.hvals key # 查看所有value值
5.hgetall key # 取出key value
6.hmset key field value [field value ...] # 批量创建hash key value
7.hmget key field [field ...] # 取多个hash值
8.hlen key # 查看指定key,多少个键值对
9.hexists key field # 查看key是否存在某个属性,存在1,不存在0
10.hstrlen key field # 查看指定key属性对应value值的长度
192.168.3.230:6379> hset user1 name zhangsan password 123456 age 18 sex 0 height 181cm
(integer) 5
192.168.3.230:6379> hget user1 name
"zhangsan"
192.168.3.230:6379> hkeys user1
1) "name"
2) "password"
3) "age"
4) "sex"
5) "height"
192.168.3.230:6379>
192.168.3.230:6379> hvals user1
1) "zhangsan"
2) "123456"
3) "18"
4) "0"
5) "181cm"
192.168.3.230:6379> hgetall user1
1) "name"
2) "zhangsan"
3) "password"
4) "123456"
5) "age"
6) "18"
7) "sex"
8) "0"
9) "height"
10) "181cm"
192.168.3.230:6379> hmset language python num1 java num2 javascript num3
OK
192.168.3.230:6379> hmget language python java javascript
1) "num1"
2) "num2"
3) "num3"
192.168.3.230:6379> hlen language
(integer) 3
192.168.3.230:6379> hexists user1 name
(integer) 1
192.168.3.230:6379> hstrlen user1 name
(integer) 8
1.12 列表
1.lpush key value [value ...] # 左侧插入元素
192.168.3.230:6379[1]> lpush sql mysql
(integer) 1
192.168.3.230:6379[1]> lpush sql redis
(integer) 2
192.168.3.230:6379[1]> lpush sql mongodb
(integer) 3
192.168.3.230:6379[1]> rpush sql oracle
(integer) 4
192.168.3.230:6379[1]> rpush sql rabbitMQ
(integer) 5
192.168.3.230:6379[1]> rpush sql sqlserver
(integer) 6
192.168.3.230:6379[1]> lrange sql 0 6
1) "mongodb"
2) "redis"
3) "mysql"
4) "oracle"
5) "rabbitMQ"
6) "sqlserver"
192.168.3.230:6379[1]> lpop sql
"mongodb"
192.168.3.230:6379[1]> lrange sql 0 6
1) "redis"
2) "mysql"
3) "oracle"
4) "rabbitMQ"
5) "sqlserver"
192.168.3.230:6379[1]> rpop sql
"sqlserver"
192.168.3.230:6379[1]> lrange sql 0 6
1) "redis"
2) "mysql"
3) "oracle"
4) "rabbitMQ"
192.168.3.230:6379[1]> lindex sql 1
"mysql"
192.168.3.230:6379[1]> llen sql
(integer) 4
192.168.3.230:6379[1]> lset sql 3 mongodb
OK
1.13 无序集合
192.168.3.230:6379[2]> sadd redis one two three
(integer) 3
192.168.3.230:6379[2]> sadd redis one two three(因为已经存在返回0)
(integer) 0
192.168.3.230:6379[2]> smembers redis
1) "two"
2) "three"
3) "one"
192.168.3.230:6379[2]> sdiff redis mysql(我有的你有返回空)
(empty list or set)
192.168.3.230:6379[2]> sdiff mysql redis(我有的你没有返回我有的)
1) "five"
2) "four"
192.168.3.230:6379[2]> sinter redis mysql
1) "two"
2) "three"
3) "one"
192.168.3.230:6379[2]> sunion redis mysql
1) "two"
2) "three"
3) "four"
4) "one"
5) "five"
192.168.3.230:6379[2]> sismember mysql five
(integer) 1
1.14 有序集合
192.168.3.230:6379[2]> zadd z1 0 zero
(integer) 1
192.168.3.230:6379[2]> zadd z1 2 two
(integer) 1
192.168.3.230:6379[2]> zadd z1 3 three
(integer) 1
192.168.3.230:6379[2]> zrange z1 0 3
1) "zero"
2) "two"
3) "three"
192.168.3.230:6379[2]> zrangebyscore z1 0 1
1) "zero"
192.168.3.230:6379[2]> zrangebyscore z1 2 3
1) "two"
2) "three"
192.168.3.230:6379[2]> zadd z1 1 mysql (分数可以重复,元素不能重复,元素分数一样返回0)
(integer) 0
192.168.3.230:6379[2]> zcount z1 0 2
(integer) 3
192.168.3.230:6379[2]> zrangebyscore z1 0 2
1) "zero"
2) "mysql"
3) "two"
192.168.3.230:6379[2]> zcard z1
(integer) 4
1.15 持久化
- aof append only file
- rdb redis database
>>> rdb:
redis-sercer:在指定的时间间隔内讲内存中的数据快照的形式写入磁盘,实际操作过程是fork一个将数据写临时文件(dump.rdb),写入成功后,
临时文件就替换掉了最终文件(dump.rpd)二进制文件
save 900 1 ---> 900秒内 1个key被修改 发起快照保存
save 300 10 ---> 300秒内 10个key被修改 发起快照保存
save 60 10000 ---> 60秒内 10000个key被修改 发起快照保存
>>>aof:appendonly no 修改为 appendonly yes(默认不开启,重启redis),开启后会多appendonly.aof文件(redis目录下)
以日志的形式记录服务器记录的每一个写删除查询操作,服务器发生重启这些命令从新执行,回复数据到内存中
redis client 发送命令 redis server 同步写的命令 appendonly.aof,往redis中存入数据,命令就会写入appendonly.aof 一旦重启,就会重
新执行appendonly.aof里面的命令将数据恢复到redis中
1.16 redis主从
- 数据库压力过大,有的读有的写所以我们再来一台redis,再来一台redis,读专门一台服务器 写专门一台服务器
主库:bind 由127.0.0.1 改成 0.0.0.0
从库:port 改成 6380
添加:slaveof ip地址 6379
配置文件修改后,重启