redis基础知识

爱被打了一巴掌 2023-10-08 12:38 66阅读 0赞

文章目录

    • 1、redis安装
      • 1.1、linux下 安装redis
      • 1.2、将redis加入开机自动启动
      • 1.3、将redis-cli加入环境变量
    • 2、redis.conf配置文件
      • 2.1、配置文件修改
      • 2.2、配置文件参数说明
    • 3、五大类型 指令
      • 3.1、String
      • 3.2、List
      • 3.3、Set
      • 3.4、哈希
      • 3.5、有序集合
    • 4、统计、事务、消息队列
      • 4.1、HyperLogLog
      • 4.2、消息通信
      • 4.3、事务
      • 4.4、脚本
      • 4.5、其他指令

1、redis安装

windows下安装参考:https://www.runoob.com/redis/redis-install.html

redis:
1、它是 c语言编写的、可基于内存、可持久化、支持网络的Key-Value数据库。
2、它性能特别高、所有操作都是原子性的。

1.1、linux下 安装redis

这里我使用的是centos8,成功安装

下载

  1. wget http://download.redis.io/releases/redis-6.0.8.tar.gz

更多的redis版本可以去这个网页查找:http://download.redis.io/releases

安装、启动

  1. # 解压
  2. tar -xzf redis-6.0.8.tar.gz
  3. # 进入解压目录
  4. cd redis-6.0.8
  5. # 编译
  6. make
  7. # 编译后启动
  8. cd src
  9. ./redis-server
  10. # 也可以根据配置文件启动
  11. ./redis-server ../redis.conf

1.2、将redis加入开机自动启动

修改配置文件

  1. # 先把redis安装到/usr/local/redis下
  2. make install PREFIX=/usr/local/redis
  3. # 复制配置文件到安装目录
  4. cp ~/redis-6.0.8/redis.conf /usr/local/redis/bin/
  5. # 修改配置文件
  6. vi /usr/local/redis/bin/redis.conf

把daemonized后面改成yes
在这里插入图片描述

  1. # 根据配置文件启动redis(在/usr/local/redis/bin目录下执行)
  2. ./redis-server redis.conf
  3. # 查看redis进程
  4. ps aux|grep redis
  5. # 编写开机启动文件
  6. vim /etc/init.d/redis

/etc/init.d/redis文件内容

  1. #!/bin/bash
  2. #
  3. # chkconfig: 2345 10 90
  4. # description: Start and Stop redis
  5. PATH=/usr/local/bin:/sbin:/usr/bin:/bin
  6. REDISPORT=6379
  7. EXEC=/usr/local/redis/bin/redis-server
  8. REDIS_CLI=/usr/local/redis/bin/redis-cli
  9. PIDFILE=/var/run/redis.pid
  10. CONF="/usr/local/redis/bin/redis.conf"
  11. AUTH="1234"
  12. case "$1" in
  13. start)
  14. if [ -f $PIDFILE ]
  15. then
  16. echo "$PIDFILE exists, process is already running or crashed."
  17. else
  18. echo "Starting Redis server..."
  19. $EXEC $CONF
  20. fi
  21. if [ "$?"="0" ]
  22. then
  23. echo "Redis is running..."
  24. fi
  25. ;;
  26. stop)
  27. if [ ! -f $PIDFILE ]
  28. then
  29. echo "$PIDFILE exists, process is not running."
  30. else
  31. PID=$(cat $PIDFILE)
  32. echo "Stopping..."
  33. $REDIS_CLI -p $REDISPORT SHUTDOWN
  34. sleep 2
  35. while [ -x $PIDFILE ]
  36. do
  37. echo "Waiting for Redis to shutdown..."
  38. sleep 1
  39. done
  40. echo "Redis stopped"
  41. fi
  42. ;;
  43. restart|force-reload)
  44. ${
  45. 0} stop
  46. ${
  47. 0} start
  48. ;;
  49. *)
  50. echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
  51. exit 1
  52. esac

设置开机启动

  1. # 设置redis 权限
  2.   chmod 755 /etc/init.d/redis
  3. # 启动redis
  4.   /etc/init.d/redis start
  5. # 设置开机启动
  6.   cd /etc/init.d/
  7.   chkconfig redis on

注意:
如果无法通过http协议访问虚拟,需要关闭防火墙,防火墙相关命令
  service iptables stop 暂停
  chkconfig iptables off 永久关闭
  service iptables status 检查状态

1.3、将redis-cli加入环境变量

  1. # 编辑profile文件
  2. vim /etc/profile
  3. # 在最后一排加入
  4. export PATH=$PATH:/usr/local/redis/bin(自己redis的路径)
  5. # 重新加载文件
  6. source /etc/profile

在家目录下试试能用不
在这里插入图片描述

2、redis.conf配置文件

2.1、配置文件修改

第一种:你可以直接在目录下找到redis.conf

  1. # 如标题1安装redis,本文安装在/usr/local/redis/bin/下,所以在该目录能找到redis.conf
  2. cd /usr/local/redis/bin/
  3. ls
  4. vi redis.conf

在这里插入图片描述
第二种:在./redis-cli下使用CONFIG修改配置

  1. # 查看所有配置项
  2. redis 127.0.0.1:6379> CONFIG GET *
  3. # 查看loglevel
  4. redis 127.0.0.1:6379> CONFIG GET loglevel
  5. # 设置daemonize为yes
  6. redis 127.0.0.1:6379>CONFIG SET daemonize yes

2.2、配置文件参数说明



















































参数 描述
daemonize no/yes 是否后台运行
pidfile 路径 记录pid的文件
port 端口号 默认端口为 6379
bind ip地址 绑定的主机地址,一般为127.0.0.1
timeout 多少秒 当客户端闲置多长秒后关闭连接,为 0 表示关闭该功能
loglevel debug/verbose/notice/warning 日志记录级别,默认为notice
logfile stdout 日志记录方式,stdout为标准输出,则日志将会发送给 /dev/null

更多内容参考:https://www.runoob.com/redis/redis-conf.html

3、五大类型 指令

1、redis客户端的指令不区分大小写

2、进入本地redis客户端 (如果没有配置路径,需要到对应目录下启动)

redis-cli

进入远程redis客户端

redis-cli -h host -p port -a password

3、redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

在这里插入图片描述

3.1、String

1、String 类型中一个k(键)对应一个v(值)
2、String类型的v(值)可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。(最大能存储 512MB)

String的指令:














指令

get(查) 、 set(增、改)、 del(删) 、 incr(值增操作)、 decr(值减操作)

  1. 127.0.0.1:6379> set a 10 # 增
  2. OK
  3. 127.0.0.1:6379> get a # 查
  4. "10"
  5. 127.0.0.1:6379> incr a # 将a的值增加1
  6. (integer) 11
  7. 127.0.0.1:6379> get a
  8. "11"
  9. 127.0.0.1:6379> decr a # 将a的值减1
  10. (integer) 10
  11. 127.0.0.1:6379> del a # 删,返回的是删掉几条数据
  12. (integer) 1

3.2、List

1、List (列表)其实就是一个k(键)有多个按顺序排列的v(值)
2、一个列表最多可以包含 2的32次方 - 1 个元素 (42亿多个元素)。

List的指令:






























































指令 功能
lpush 左增
rpush 右增
lset 改,根据下标
lindex 查,一个
lrange 查,范围
llen 查长度
ltrim 删,范围
lpop 移除并返回列表的第一个元素。
rpop 移除并返回列表的最后一个元素。
blpop 移除并返回列表的第一个元素。如果没有元素,他将等待元素出来为止
brpop 移除并返回列表的最后一个元素。如果没有元素,他将等待元素出来为止
linsert k before v1 v2 在v1前插入v2
LREM k count v 去除重复

其他指令参考:https://www.runoob.com/redis/redis-lists.html

  1. 127.0.0.1:6379> lpush aa 100
  2. 127.0.0.1:6379> rpush aa 300
  3. 127.0.0.1:6379> lrange aa 0 10 # 查aa中下标为0-10的数据
  4. 127.0.0.1:6379> lrange aa 0 -1 # 查所有
  5. 127.0.0.1:6379> lset aa 2 500 # 更改aa中下标为2的值,改为500
  6. 127.0.0.1:6379> ltrim aa 0 1 # 删除下标为0-1中的元素
  7. 127.0.0.1:6379> ltrim aa 1 0 # 清空aa中所有内容,start要比end大,且都为正数,就是删所有
  8. 127.0.0.1:6379> ltrim aa 1 -1 # 只删除第0个元素
  9. 127.0.0.1:6379> linsert aa before "10" "100" # 在10前插入100

在这里插入图片描述

3.3、Set

1、Set 是 String 类型的无序集合、但不能出现重复值。

set指令:


































指令 功能
sadd 增 ,一个或多个
srem 删,一个或多个,不存在的值就忽略,
spop 移除并返回集合中的一个随机元素
sunion 查,可以查多个set的并集
scard 查集合里有多少个元素
sdiff 查第一个集合与其他集合之间的差异

更多set指令参考:https://www.runoob.com/redis/redis-sets.html

  1. 127.0.0.1:6379> SADD aaa vv1
  2. 127.0.0.1:6379> sadd aaa vv1 vv2
  3. 127.0.0.1:6379> srem aaa vv1
  4. 127.0.0.1:6379> sunion aaa bbb
  5. 127.0.0.1:6379> sdiff aaa bbb

3.4、哈希

1、hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
2、每个 hash 可以存储 232 - 1 键值对(40多亿)。
3、hash里面存的是一张表,包含了多个k

hash指令:


















































指令 功能
hset
hdel 删除字段,一个或多个
hget 获取指定k的v
hmget 获取指定k的v,可以多个
hkeys 获取所有k
hgetall 获取某个表的所有值(有k、v)
hvals 获取某个表的所有值(只返回v)
hexists 查看某个k是否存在,返回1存在,0不存在
hincrby 为某个值指定增量(整数)
hincrbyfloat 为某个值指定增量(浮点)

更多hash指令查看:https://www.runoob.com/redis/redis-hashes.html

  1. 127.0.0.1:6379> HSET myhash field1 "foo"
  2. 127.0.0.1:6379> HDEL myhash field1
  3. 127.0.0.1:6379> HGETALL myhash
  4. 127.0.0.1:6379> HEXISTS myhash field1

3.5、有序集合

1、有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
2、有序集合里每个V都有一个 double 类型的分数(类似索引,但分数可以重复),V利用分数进行从小到大排列。
3、集合中最大的成员数为 2的23次方- 1(40多亿)。

sorted set指令:






































指令 功能
zadd
zrem 删,可以多个
Zremrangebyscore 移除有序集中,指定分数区间内的所有成员。
zrange 查,范围
zcard 查分数
Zcount 查分数范围内的V
Zrank 查索引

更多有序集合指令参考:https://www.runoob.com/redis/redis-sorted-sets.html

  1. 127.0.0.1:6379> ZADD bb 1 vv1
  2. 127.0.0.1:6379> ZREM bb vv1
  3. 127.0.0.1:6379> ZRANGE bb 0 -1 WITHSCORES # 显示整个有序集成员
  4. 127.0.0.1:6379> ZRANGE bb 1 2 WITHSCORES # 显示有序集下标区间 1 至 2 的成员
  5. 127.0.0.1:6379> ZRANK bb vv1
  6. 127.0.0.1:6379> ZREMRANGEBYSCORE bb 1500 3500

4、统计、事务、消息队列

4.1、HyperLogLog

1、用于统计基数(不存储元素,只存储数量)。
2、优点是运算“快”、占内存“小”(一个键占12KB,可计算近 2^64 个不同元素的基数)。
3、HyperLogLog是一种算法,并非redis独有。
4、一般少量数据统计不会使用它,大量数据使用才能体现它的优越

例:

  1. # 添加统计
  2. 127.0.0.1:6379> pfadd m1 1 2 3 4 1 2 3 2 2 2 2
  3. # 获取基数值
  4. 127.0.0.1:6379> pfcount m1
  5. # 合并多个k
  6. 127.0.0.1:6379> pfmerge ms m1 m2
  7. # 获取合并后的基数
  8. 127.0.0.1:6379> pfcount ms

4.2、消息通信

就是一边发数据另一边收数据

在这里插入图片描述


































指令 功能
subscribe 订阅,可以订阅多个
psubscribe 订阅,可以模糊、多匹配订阅
publish 发送
pubsub channels 查看正在被订阅的k
PUNSUBSCRIBE 退订所有
UNSUBSCRIBE 退订
  1. 127.0.0.1:6379> PSUBSCRIBE a* # 订阅所有以a开头的频道,支持其他符号:?、[]

4.3、事务

事务用来一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

例:

  1. # 开始输入事务中的指令
  2. redis 127.0.0.1:6379> MULTI
  3. OK
  4. redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
  5. QUEUED
  6. redis 127.0.0.1:6379> GET book-name
  7. QUEUED
  8. redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
  9. QUEUED
  10. redis 127.0.0.1:6379> SMEMBERS tag
  11. QUEUED
  12. # 指令输入完成,开始执行事务
  13. redis 127.0.0.1:6379> EXEC
  14. 1) OK
  15. 2) "Mastering C++ in 21 days"
  16. 3) (integer) 3
  17. 4) 1) "Mastering Series"
  18. 2) "C++"
  19. 3) "Programming"





























指令 功能
MULTI 开始输入事务
EXEC 执行事务
DISCARD 放弃事务
Watch 监视,如果被监视的k被其他命令动用,这个事务被打断
UNWATCH 取消监视

4.4、脚本

在redis指令内部实现逻辑。
1、脚本采用的语言:Lua,redis客户端自带其编译器

Lua教程:https://www.runoob.com/lua/lua-basic-syntax.html

2、redis使用Eval指令接Lua脚本

具体使用方法参考:https://www.runoob.com/redis/scripting-eval.html

4.5、其他指令














































指令 功能
AUTH password 验证密码是否正确
ECHO message 打印字符串
PING 测服务端客户端连接是否正常
SELECT index 切换到指定库
INFO 服务器命令,更多请参考:https://www.runoob.com/redis/redis-server.html
geoadd 添加地理信息,更多请参考:https://www.runoob.com/redis/redis-geo.html
XADD 添加到消息队列,Redis 5.0 版本新增加的数据结构。
XDEL 删除消息队列中的消息
XRANGE 获取消息队列,范围

关于消息队列:
1、Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
2、更多关于消息队列参考:https://www.runoob.com/redis/redis-stream.html

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读

    相关 redis基础知识

    目录 一、关系数据库与非关系型数据库 1、关系型数据库 2、非关系型数据库 3、关系型数据库和非关系型数据库区别 3.1、数据存储方式不同 3.2、扩展方式不同