Redis安装(Linux)

安装redis

cd /opt

在官网redis.io中复制下载链接

wget https://download.redis.io/releases/redis-6.2.13.tar.gz

 解压到local中

由于redis是由c语言编写。所以安装C语言运行环GCC

编译源代码(使其成为可执行文件):make

(make会根据makefile文件中关于install项目,将编译完成的数据安装到预定目录)

编译完成后目录出现src,接着进行安装

cd src查看文件目录ls

注意:

redis-benchmark:Redis自带的基准性能测试工具

redis-check-aof:对有问题的 AOF 文件进行修复,AOF和RDB文件后面会说明

redis-check-rdb:对有问题的 RDB文件进行修复

redis-sentinel:Redis集群使用

redis-cli:客户端

redis-server:服务器启动

服务启动

前台启动:/usr/local/bin下执行

打开服务端./redis-server

(由于退出前台服务关闭,故需要启动后台服务。)

后台启动

在redis-6.2.13中修改redis.conf文件:

daemonize  yes   #由no改为yes

(:set nu可以查看行数,该配置在257行)

进入redis的src中启动后台服务:
./redis-server ../redis.conf
查看端口6379(默认端口)是否运行:

客户端启动

通过命令连接到服务:./redis-cli
 

Docker下安装Redis

关闭redis准备在容器下安装redis:

查看运行情况:运行时可以发现运行失败

安装docker服务:

运行docker

下载一个redis的镜像文件并查看

启动容器并查看

查看是否启动redis

查看是否连接成功

exit直接退出

redis基础知识

redis默认16个数据库

redis由于基于内存操作(最可能的瓶颈是机器内存大小或网络带宽),使用单线程操作。采用网络io多路(多个网络连接)复用(复用同一线程)技术保障多连接时系统的高吞吐量。

切换数据库

启动redis服务

连接redis

缓存

切换库到1(默认在0库操作)

清空数据库

清空当前库的数据:

通杀全部库flushall(删除所有库的数据):

redis采用多路I/O复用模型,默认16数据库

redis数据类型

keys

有3个通配符 *, ? ,[]

  • *: 通配任意多个字符
  • ?: 通配单个字符
  • []: 通配括号内的某1个字符

*:获取所有值

获取以k开头的所有值:k*

注意: 生产已经禁止。因为长时间阻塞redis而导致其他客户端的命令请求一直处于阻塞状态。 更安全的做法是采用scan。

不会造成阻塞的方法:

exists

判断某个key是否存在,返回1表示存在,0不存在。

(可以判断某商品是否处于缓存中)

type

判断类型,查看当前key 所储存的值的类型。返回当前key所储存的值的类型,如string 、list等。

del

删除已存在的key,不存在的 key 会被忽略。

expire

给key设置time秒的过期时间。设置成功返回 1 。 当 key 不存在返回 0。

10秒后k1失效(例如验证码应用)

ttl

以秒为单位返回 key 的剩余过期时间。

可以查看其过期剩余时间

注意:

当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。

persist

移除给定 key 的过期时间,使得 key 永不过期。

注意:

当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。

redis数据类型—String

一个key对应一个value。

set

用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。

get

用于获取指定 key 的值。如果 key 不存在,返回 nil 。

append

将给定的value追加到key原值末尾。

注意:

  • 如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。
  • 如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样。

strlen

获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

setex

给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过期时间。

setnx

只有在key不存在时设置key的值。(这里的k1存在,k5不存在)

getrange

获取指定区间范围内的值,类似between........and 的关系

setrange

获取指定区间范围内的值(替换)类似between........and 的关系

incr

将 key 中储存的数字值增一。(应用:网站访问次数)

注意:

  • 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作。
  • 如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。

decr

将 key 中储存的数字值减一。

incrby/decrby key step

将key存储的数字值按照step进行增减。

mset

同时设置一个或多个 key-value 。

mget

返回所有(一个或多个)给定 key 的值。

注意:

如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。

getset

将给定key值设为value,并返回key的旧值(old value),简单一句话(先get然后立即set)。

redis数据类型—List

List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。底层是一个双向链表,对两段操作性能极高,通过索引操作中间的节点性能较差。

未命名文件 (24)

一个List最多可以包含 $2^{32}-1$个元素 ( 每个列表超过40亿个元素)。

lpush/rpush

从左边(头部)/右边(尾部)插入一个或多个值。

lrange

获取数据,返回key列表中的start和end之间的元素(包含start和end)。 其中 0 表示列表的第一个元素,-1表示最后一个元素。

lpop/rpop

(从头弹出数据)移除并返回第一个值或最后一个值。

lindex

获取列表下标值index位置的值(从左开始)。

llen

获取列表长度。

lrem

从左边开始删除与value相同的count个元素。

linsert

在列表中value值的前边/后边插入一个new value值(从左开始)。

lset

将索引为index的值设置为value

Redis数据类型_Set

sadd

将一个或多个元素添加到集合key中,已经存在的元素将被忽略。

smembers

取出该集合的所有元素。

sismember

判断集合key中是否含有value元素,如有返回1,否则返回0。

scard

返回该集合的元素个数。

srem

删除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

spop

随机删除集合中一个元素并返回该元素。

srandmember

随机取出集合中count个元素,但不会删除。

smove

将value元素从sourcekey集合移动到destinationkey集合中。

sinter

返回两个集合的交集元素。

sunion

返回两个集合的并集元素。

sdiff

返回两个集合的差集元素(key1中的,不包含key2)

使用场景

  • 黑白名单
  • 随机展示
  • 好友
  • 关注人
  • 粉丝
  • 感兴趣的人集合

Redis数据类型_Hash

Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Hash存储结构优化

  • 如果field数量较少,存储结构优化为类数组结构
  • 如果field数量较多,存储结构使用HashMap结构

常用命令

hset

给key集合中的field赋值value。

语法结构:

hset key field value

注意:如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被重写。

hget

从key哈希中,取出field字段的值。

语法结构:

hget key field

hmset

批量设置哈希的字段及值。

语法结构:

1hmset key field1 value1 field2 value2……

hexists

判断指定key中是否存在field

语法结构:

hexists key field

注意:如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

hkeys

获取该哈希中所有的field。

语法结构:

hkeys key

hvals key

获取该哈希中所有的value。

语法结构:

hvals key

hincrby

为哈希表key中的field字段的值加上增量increment。

语法结构:

hincrby key field increment

注意:增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 hincrby 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 hincrby 命令将造成一个错误。1hincrby user1 age 10 对user中的age字段做运算,增加10

hdel

删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。

语法结构:

hdel key field1 field2……

hsetnx

给key哈希表中不存在的的字段赋值 。

语法结构:

hsetnx key field value

注意:如果哈希表不存在,一个新的哈希表被创建并进行 hsetnx 操作。如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行 hsetnx 命令。

使用场景

  • 购物车
  • 存储对象

Redis数据类型_Zset

简介

Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数(score),这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的,但分数可以重复。

注意:因为元素是有序的,所以可以根据分数(score)或者次序(position)来获取一个范围内的元素。

常用命令

zadd

将一个或多个元素(value)及分数(score)加入到有序集key中。

语法结构:

zadd key score1 value1 score2 value2……

注意:如果某个元素已经是有序集的元素,那么更新这个元素的分数值,并通过重新插入这个元素,来保证该元素在正确的位置上。分数值可以是整数值或双精度浮点数。如果有序集合 key 不存在,则创建一个空的有序集并执行 zadd 操作。

zrange

返回key集合中的索引start和索引end之间的元素(包含start和end)。

语法结构:

zrange key start end [withscores]

注意:其中元素的位置按分数值递增(从小到大)来排序。 其中 0 表示列表的第一个元素,-1表示最后一个元素。withscores是可选参数,是否返回分数。

zrangebyscore

返回key集合中的分数minscore 和分数maxscore 之间的元素(包含minscore 和maxscore )。其中元素的位置按分数值递增(从小到大)来排序。

语法结构:

zrangebyscore key minscore maxscore [withscores]

zincrby

为元素value的score加上increment的值。

语法结构:

zincrby key increment value

zrem

删除该集合下value的元素。

语法结构

zrem k1 php 删除php

zcount

统计该集合在minscore 到maxscore分数区间中元素的个数。

语法结构:

1zcount key minscore maxscore

zrank

返回value在集合中的排名,从0开始。

语法结构:

zrank key value

使用场景

  • 延时队列
  • 排行榜
  • 限流

Redis数据类型_Bitmaps

计算机以二进制的方式存储(ascll码)

在内存中

abc二进制

合理使用位能有效提高内存使用率和开发效率

setbit

设置某个偏移量的值。

redis中bitmaps可以用来统计用户信息。(活跃天数)

考勤:1为没有迟到,0为迟到

getbit

获取偏移量值

bitcount

统计字符串被设置为1的bit数量(eg:统计张三没有迟到几天)

bitop

记录活跃天数。

Redis数据类型_Geospatia

geo为geographic地理信息的缩写。元素的二维坐标,地图经纬度。

提供经纬度设置,查询,范围查询,距离查询等常见操作。

geoadd

添加存储指定位置(北京的坐标点)

geoadd china 116.331174 39.90074 beijing

geopos

取出指定位置

geopos chaina beijing即可显示

geodist

返回两个给定位置之间的距离。(商家距离用户多少米)

geodist china beijing chengdu m(北京和成都相距多少米)

georadius

已给定经纬度为中心,返回与中心距离不超过给定l量的最大距离的元.素

georadius china 110 30 1200 km

使用场景:附近电影院、好友、美食店

Redis数据类型_HyperLogLog

简介

在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page view)。

redis HyperLogLog是用来做基数统计的算法。

HyperLogLog的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且使很小的。

什么是基数

比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5.基数估计就是在误差可接受的范围内,快速计算基数。

常用命令

pfadd

将所有元素参数添加到 Hyperloglog 数据结构中。

pfadd book1 uid1 uid2 uid3 uid3 uid3 

注意:添加元素到HyperLogLog中,如果内部有变动返回1,没有返回0。

pfcount

计算Hyperloglog 近似基数,可以计算多个Hyperloglog ,统计基数总数。

pfcount book1(查看这本书有多少人看)

pfmerge

将一个或多个Hyperloglog(sourcekey1) 合并成一个Hyperloglog (destkey )。

(统计每月的活跃用户)

pfmerge book book1 book2(合并借书情况)

使用场景

基数不大,数据量不大就用不上,会有点大材小用浪费空间,有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么,和bitmap相比,属于两种特定统计情况,简单来说,HyperLogLog 去重比 bitmaps 方便很多,一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃。

  • 网站PV统计
  • 网站UV统计
  • 统计访问量(IP数)
  • 统计在线用户数
  • 统计每天搜索不同词条的个数
  • 统计文章真实阅读数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值