前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis系列之Redis基础安装与基础知识

Redis系列之Redis基础安装与基础知识

原创
作者头像
天下之猴
发布2024-09-20 20:18:13
1020
发布2024-09-20 20:18:13
举报
文章被收录于专栏:Redis从入门到精通

Redis的基础使用

redis的安装

windows不是官方版本,是别人封装过了的,本质还是linux

  1. 安装依赖
  1. 进入指定文件夹,该文件夹用于存放相关文件
  1. 引入redis文件
  1. 解压文件

redis的启动

前台启动

在任意位置输入redis-server即可前台启动,但会阻塞整个会话窗口,不建议这种启动方式

后台启动

  1. 保险起见,备份一份配置文件cp redis.conf redis.conf.bck
  2. 修改相关配置
代码语言:javascript
复制
# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes 
# 密码,设置后访问Redis必须输入密码
requirepass 123456
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile "redis.log"
  1. 进入安装目录cd /usr/local/src/redis-6.2.6
  2. 启动redis-server redis.conf

设置开机自启动

  1. 首先,新建一个系统服务文件:

vi /etc/systemd/system/redis.service

将下面内容粘贴到下面去

代码语言:javascript
复制
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 重载系统服务systemctl daemon-reload,让系统获取到该文档
  2. 启动redissystemctl start redis
  3. 关闭redis:shutdown
  4. 设置开机自启systemctl enable redis

redis的关闭

redis-cli -p 6379 shutdown

redis的连接

  • 输入redis-cli -h 192.168.146.128 -p 6379 -a 123456,没有密码则取消a
    • 上述情况有时候没输密码能进有时候进不了报NOAUTH Authentication required.输入auth "yourpassword"即可进入

密码设置

config set requirepass 123456

Java操作Redis

Spring Data Redis

基础知识

  • 键值对创建后有效期为永久有效
  • redis的键值允许层级结构来存储,以此来实现类似于不同表的同一id功能,通过:实现分层
  • 同一类型的键相同会覆盖,不同类型的键可以重复

基本数据类型

字符串

字符串又分为三种,普通字符串,int、float,但是int和float存储形式是按二进制存储的,这样能存更多的数据,字符串,单个键值对最大存储为512mb

  • SET:添加或者修改已经存在的一个String类型的键值对(会覆盖)
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行(不会覆盖原有的value)
  • SETEX:添加一个String类型的键值对,并且指定有效期

集合(Set)

特点

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

常见命令

  • SADD key member ... :向set中添加一个或多个元素
  • SREM key member ... : 移除set中的指定元素
  • SCARD key: 返回set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于set中
  • SMEMBERS key:获取set中的所有元素
  • SINTER key1 key2 ... :求key1与key2的交集
  • SDIFF key1 key2...:求key1与key2的差集
  • SUNION key1 key2...:求key1和key2的并集

有序集合(Sorted Set)

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max whitscores limit offset count:按照score排序后,获取指定score范围内的元素,可以用滚动查询,offset为从最大值开始的偏移量,count为插叙的数据条数
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member
  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

列表(list)

  • LPUSH key element ... :向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element ... :向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

哈希(Hash)

哈希类型存储对象是每个字段分别存储,可对一个对象的单个字段进行修改

  • HSET key field value:添加或者修改hash类型key的field的值
  • HGET key field:获取一个hash类型key的field的值
  • HMSET:批量添加多个hash类型key的field的值
  • HMGET:批量获取多个hash类型key的field的值
  • HGETALL:获取一个hash类型的key中的所有的field和value
  • HKEYS:获取一个hash类型的key中的所有的field
  • HINCRBY:让一个hash类型key的字段值自增并指定步长
  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

特殊类型

位图(Bitmap)

作用

多用于签到统计

  • SETBIT:向指定位置(offset)存入一个0或1
  • GETBIT:获取指定位置(offset)的bit值
  • BITCOUNT:统计BitMap中值为1的bit位的数量
  • BITFIELD:操作(查询、修改、自增)BitMap中bit数组中的指定位置(offset)的值,查询时offset表示从哪开始,type表示从开始点往后读取多少位,还能指定返回结果有无符号,返回结果以十进制返回
  • BITFIELD_RO:获取BitMap中bit数组,并以十进制形式返回
  • BITOP:将多个BitMap的结果做位运算(与、或、异或)
  • BITPOS:查找bit数组中指定范围内第一个0或1出现的位置

HyperLogLog

Redis中的HLL是基于string结构实现的,单个HLL的内存永远小于16kb,内存占用低的令人发指!作为代价,其测量结果是概率性的,有小于0.81%的误差。不过对于UV统计来说,这完全可以忽略。

使用场景

用于UV统计(UV统计统计用户数量,PV统计页面访问次数)

  • PFADD:添加进去
  • PFCOUNT:统计数量,重复值不会多次统计
  • PFMERGE KEY1 KEY2:将key2的数据添加进key1

地理空间(Geospatial)

多用于位置距离计算,范围寻找

  • GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)
  • GEODIST:计算指定的两个点之间的距离并返回
  • GEOHASH:将指定member的坐标转为hash字符串形式并返回
  • GEOPOS:返回指定member的坐标
  • GEORADIUS:指定圆心、半径,找到该圆内包含的所有membeer,并按照与圆心之间的距离排序后返回。6.2以后已废弃
  • GEOSEARCH:在指定范围内搜索member,并按照与指定点之间的距离排序后返回。范围可以是圆形或矩形。6.2.新功能
  • GEOSEARCHSTORE:与GEOSEARCH功能一致,不过可以把结果存储到一个指定的key。6.2.新功能

流(Stream)

是一种仅追加的数据结构,不允许修改和删除

  • XADD key [NOMKSTREAM] [<MAXLEN | MINID> [= | ~] threshold [LIMIT count]] <* | id> field value [field value ...]
    • key:队列名
    • NOMKSTREAM:不存在时是否自动创建队列,默认开启
    • 最大消息数量
    • 消息的唯一ID,*代表由redis自动生成,格式为时间戳-递增数字
    • 消息,为多个键值对
  • XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id...]
    • COUNT count:每次读取消息的最大数量
    • BLOCK milliseconds:没有消息时是否阻塞,阻塞时长,0为永久阻塞
    • STREAMS key [key ...]:从哪些队列读取消息
    • id [id...]:起始ID,只返回大于该ID的消息,0代表从第一个消息开始,$代表从最新的消息开始
使用过程中问题

监听时,如果处理消息过程中,一次性来了多条数据,将会出现消息漏读,通过消费者组解决

消费者组
  • 消息分流:将队列中的消息分发给组中不同消费者
  • 消息标识:消费者组会维护一个标识,该标识记录最后一个被处理的消息,宕机重启后,还是会从该标识之后读取消息
  • 消息确认:消费者获取消息后,消息处于一个pending状态,存入一个pending-list,处理完后通过XACK来确认消息,标记为已处理后,才会将消息从pending-list移除
使用
  • XGROUP CREATE key group <id | $> [MKSTREAM] [ENTRIESREAD entries-read]
    • key:队列名称
    • group:组名称
    • id:从哪开始监听
    • MKSTREAM:自动创建队列
  • XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] id [id ...]
    • group:消费者组名称
    • consumer:消费者名称
    • count:本次查询的最大数量
    • BLOCK milliseconds:没有消息时的阻塞时长
    • NOACK:无需手动ACK,获取消息后自动确认
      • XACK key group id [id ...]
        • key:队列名
        • group:组名
        • id:消息id
    • STREAMS key [key ...]:指定队列名称
    • id [id ...]:获取消息的起始ID
      • ">":从下一个未消费的消息开始
      • 其它:根据指定id从pending-list中获取已消费但未确认的消息息,例如0,是从pending-list中的第一个消息开始
  • XGROUP DESTORY key groupName:删除指定的消费者组

Redis键值对与常规的键值对比

  • redis的键值可以存对象类型,而不仅仅只有基本数据类型,例如list数组、哈希表
  • redis是非关系数据库(NOSQL),非关系数据库有多种存储,常见的有键值存储,文档存储,列存储、图存储、对象存储

Redis相关知识

  • Redis是单线程的

redis中命令

  • 选择第几个数据库:select 数字
  • 连接redis:redis-cli -h 192.168.146.128 -p 6379 -a密码
    • -p:指定的端口,如果不指定,则默认6379端口
    • -h:指定的主机地址
    • -a:指定的密码
  • keys:查询匹配的key,例如:keys *(查询所有的key)、key n*(查询n开头的所有key),
  • del:删除指定的键,可批量删除,返回值为成功删除的键值对数量,例如:del k1(删除键为k1的数据对),del k1 k2 k3 k4(批量删除,若有没有的键不影响,)
  • exists:判断一个键是否存在,存在返回1,不存在返回0,例如:exists k1
  • expire:为key值设置一个有效期,到期时该key值会自动删除,默认值为秒
  • ttl:查询一个key值的有效期,-1为永久有效

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis的基础使用
    • redis的安装
      • redis的启动
        • 前台启动
        • 后台启动
        • 设置开机自启动
      • redis的关闭
        • redis的连接
          • 密码设置
            • Java操作Redis
            • 基础知识
              • 基本数据类型
                • 字符串
                • 集合(Set)
                • 有序集合(Sorted Set)
                • 列表(list)
                • 哈希(Hash)
              • 特殊类型
                • 位图(Bitmap)
                • HyperLogLog
                • 地理空间(Geospatial)
                • 流(Stream)
              • Redis键值对与常规的键值对比
                • Redis相关知识
                • redis中命令
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档