Redis

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             # 需要安装gcc
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                                        # 创建redis目录
mv redis-5.0.5 /usr/local/redis/                              # 移动当前目录解压好redis到指定目录
cd /usr/local/redis/redis-5.0.5                               # 进入目录
make                                                          # 执行make命令编译                                                 
[root@localhost redis-5.0.5]# make install                    # 执行安装命令
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    # 显示行号

# 注释掉它,以便让外网访问(69行)
# bind 127.0.0.1 或者改成 bind 0.0.0.0

# 关闭保护模式
protected-mode no

# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程(136行)
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
# daemonize no 改为 yes 后,Redis后台启动
daemonize yes

# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis_6379.pid

# 指定Redis监听端口,默认端口为6379
# 如果指定0端口,表示Redis不监听TCP连接
port 6379

# 工作目录.
# 指定本地数据库存放目录,文件名由上一个dbfilename配置项指定
#
# Also the Append Only File will be created inside this directory.
#
# 注意,这里只能指定一个目录,不能指定文件名
# 最后一行 /var/redis/6379 这个目录还没有,需要我们创建,用于存放redis的持久化文件。
dir /var/redis/6379

然后执行命令:

#设置开机执行redis脚本
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 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11651:C 25 Mar 2020 11:40:04.139 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=11651, just started
11651:C 25 Mar 2020 11:40:04.139 # Configuration loaded

# 查看redis是否启动
[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

# 返回 PONG 说明连接成功了
[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                # 设置密码123456789
OK 
192.168.3.230:6379> keys *                                          # 查看所有键
(error) NOAUTH Authentication required.                             # 提示没有权限
192.168.3.230:6379> auth 123456789                                  # 输入密码
OK

1.8 基础操作

# 切换指定的库
192.168.3.230:6379> select 1
OK

# 查找指定开头key
192.168.3.230:6379> keys u*
1) "username"

# 查看当前库key的数量
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的过期时间


# 语法:set key value
192.168.3.230:6379> set username kangbazi     # 创建
OK
192.168.3.230:6379> type username             # 查看key的类型
string
192.168.3.230:6379> get username              # 取出
"kangbazi"
192.168.3.230:6379> keys *                    # 列除所有key
1) "username"
192.168.3.230:6379> del username              # 删除key
(integer) 1

# 值得累加
192.168.3.230:6379> set num 1
OK
192.168.3.230:6379> incr num                 # 自增1
(integer) 2
192.168.3.230:6379> decr num                 # 自减1
(integer) 18
192.168.3.230:6379> incrbyfloat num 12.34    # 增加浮点数
"15.34"

# 查看过期时间,-1永不过期
192.168.3.230:6379> ttl num
(integer) -1

# 设置过期时间
192.168.3.230:6379> EXPIRE username 10       # 设置key过期时间
(integer) 1
192.168.3.230:6379> TTL username             # -2 已经过期
(integer) -2
192.168.3.230:6379> setex name 10 haha       # 设置value过期时间
OK
192.168.3.230:6379> get name                 # 10s时间过期
(nil)

# 查看value值的长度
192.168.3.230:6379> STRLEN username
(integer) 8
192.168.3.230:6379> get username
"kangbazi"

# 追加字符串到指定的key对应的value
192.168.3.230:6379> append username world
(integer) 10
-----------------------------以上操作单个key-----------------------------
# 创建多个key value
192.168.3.230:6379> mset name kangbazi name1 kangbazi1
OK

# 获取过个value
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值的长度
# 创建hash表
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"

# 查看所有key属性
192.168.3.230:6379> hkeys user1
1) "name"
2) "password"
3) "age"
4) "sex"
5) "height"
192.168.3.230:6379> 

# 查看所有value值
192.168.3.230:6379> hvals user1
1) "zhangsan"
2) "123456"
3) "18"
4) "0"
5) "181cm"

# 取出key value
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"

# 批量创建hash key value
192.168.3.230:6379> hmset language python num1 java num2 javascript num3
OK

# 取多个hash值
192.168.3.230:6379> hmget language python java javascript
1) "num1"
2) "num2"
3) "num3"

# 查看指定key,多少个键值对
192.168.3.230:6379> hlen language
(integer) 3

# 查看key是否存在某个属性,存在1,不存在0
192.168.3.230:6379> hexists user1 name
(integer) 1

# 查看指定key属性对应value值的长度
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"

# 查看指定key列表多少个元素
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"

# 判断指定key知否存在指定的元素
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"

# 有序列表指定的key下面有多少个元素
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

配置文件修改后,重启
发布了24 篇原创文章 · 获赞 5 · 访问量 2690
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览