redis基础知识

1、redis安装

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

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

1.1、linux下 安装redis

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

下载

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

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

安装、启动

# 解压
tar -xzf redis-6.0.8.tar.gz
# 进入解压目录
cd redis-6.0.8
# 编译
make
# 编译后启动
cd src
./redis-server
# 也可以根据配置文件启动
./redis-server ../redis.conf

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

修改配置文件

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

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

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

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

#!/bin/bash
#
# chkconfig: 2345 10 90  
# description: Start and Stop redis   
PATH=/usr/local/bin:/sbin:/usr/bin:/bin   
REDISPORT=6379  
EXEC=/usr/local/redis/bin/redis-server   
REDIS_CLI=/usr/local/redis/bin/redis-cli   
PIDFILE=/var/run/redis.pid   
CONF="/usr/local/redis/bin/redis.conf"  
AUTH="1234"  
case "$1" in   
        start)   
                if [ -f $PIDFILE ]   
                then   
                        echo "$PIDFILE exists, process is already running or crashed."  
                else  
                        echo "Starting Redis server..."  
                        $EXEC $CONF   
                fi   
                if [ "$?"="0" ]   
                then   
                        echo "Redis is running..."  
                fi   
                ;;   
        stop)   
                if [ ! -f $PIDFILE ]   
                then   
                        echo "$PIDFILE exists, process is not running."  
                else  
                        PID=$(cat $PIDFILE)   
                        echo "Stopping..."  
                       $REDIS_CLI -p $REDISPORT  SHUTDOWN    
                        sleep 2  
                       while [ -x $PIDFILE ]   
                       do  
                                echo "Waiting for Redis to shutdown..."  
                               sleep 1  
                        done   
                        echo "Redis stopped"  
                fi   
                ;;   
        restart|force-reload)   
                ${0} stop   
                ${0} start   
                ;;   
        *)   
               echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2  
                exit 1  
esac

设置开机启动

# 设置redis 权限
  chmod 755 /etc/init.d/redis
# 启动redis
  /etc/init.d/redis start
# 设置开机启动
  cd /etc/init.d/
  chkconfig redis on

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

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

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

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

2、redis.conf配置文件

2.1、配置文件修改

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

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

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

# 查看所有配置项
redis 127.0.0.1:6379> CONFIG GET *
# 查看loglevel
redis 127.0.0.1:6379> CONFIG GET loglevel
# 设置daemonize为yes
redis 127.0.0.1:6379>CONFIG SET daemonize “yes”

2.2、配置文件参数说明

参数描述
daemonizeno/yes是否后台运行
pidfile路径记录pid的文件
port端口号默认端口为 6379
bindip地址绑定的主机地址,一般为127.0.0.1
timeout多少秒当客户端闲置多长秒后关闭连接,为 0 表示关闭该功能
logleveldebug/verbose/notice/warning日志记录级别,默认为notice
logfilestdout日志记录方式,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(值减操作)

127.0.0.1:6379> set a 10     # 增
OK
127.0.0.1:6379> get a        # 查
"10"
127.0.0.1:6379> incr a       # 将a的值增加1
(integer) 11
127.0.0.1:6379> get a               
"11"
127.0.0.1:6379> decr a       # 将a的值减1
(integer) 10
127.0.0.1:6379> del a        # 删,返回的是删掉几条数据
(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

127.0.0.1:6379> lpush aa 100
127.0.0.1:6379> rpush aa 300

127.0.0.1:6379> lrange aa 0 10      # 查aa中下标为0-10的数据
127.0.0.1:6379> lrange aa 0 -1      # 查所有 

127.0.0.1:6379> lset aa 2 500       # 更改aa中下标为2的值,改为500

127.0.0.1:6379> ltrim aa 0 1        # 删除下标为0-1中的元素
127.0.0.1:6379> ltrim aa 1 0        # 清空aa中所有内容,start要比end大,且都为正数,就是删所有
127.0.0.1:6379> ltrim aa 1 -1       # 只删除第0个元素

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

127.0.0.1:6379> SADD aaa vv1
127.0.0.1:6379> sadd aaa vv1 vv2
127.0.0.1:6379> srem aaa vv1
127.0.0.1:6379> sunion aaa bbb
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

127.0.0.1:6379> HSET myhash field1 "foo"
127.0.0.1:6379> HDEL myhash field1
127.0.0.1:6379> HGETALL myhash
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

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

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

4.1、HyperLogLog

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

例:

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

4.2、消息通信

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

在这里插入图片描述

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

4.3、事务

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

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

例:

# 开始输入事务中的指令
redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

# 指令输入完成,开始执行事务
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值