学习Redis第一天

redis 第一天

目录

redis 第一天一 .linux命令补充1.vim命令补充2 .linux命令补充二.在虚拟机中安装redis1.redis是什么2.Redis安装1、上传并解压2、安装编译所需的依赖3、编译并安装Redis4、配置环境变量5、复制配置文件6、修改配置文件7、编辑service文件8、启动、停止、重启Redis服务三. redis中String类型学习1.redis中的数据类型2.redis中String类型的命令四.redis 中的bitmap位图1.bitmap基本命令2.bitmap 位操作3.bitmap 库的操作及认识

一 .linux命令补充

1.vim命令补充

yy复制单行,通过在前面加上数字来复制当前光标所在行下的多行
P将指定缓冲区的内容放到当前光标的位置之上
dd删除整行,通过在前面加上数字来删除当前光标所在行下的多行
x删除光标位置指定的字符
撤销上一步操作
ctrl+r还原上步操作
$将光标移动到行首
^将光标移动到行尾
G将光标移动到文章末尾
gg将光标移动到文章头部
%x/y/g全局替换 x代表旧字符,y代表新字符
/+字符查找字符

2 .linux命令补充

ctrl+u 删除光标之前的所有内容

cd - 返回到跳转之前的上一个目录

二.在虚拟机中安装redis

1.redis是什么

开源的(BSD协议),使用ANSI C 编写,基于内存的且支持持久化,高性能的Key-Value的NoSQL数据库 支持数据结构类型丰富,有如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 丰富的支持主流语言的客户端,C、C++、Python、Erlang、R、C#、Java、PHP、Objective-C、Perl、Ruby、Scala、Go、JavaScript 用途:缓存、数据库(微博)、消息中间件(微博)

2.Redis安装

1、上传并解压

redis 安装包可以在官网下载 redis.io

这里我们选择的是2022年1月的最新版本 redis-6.2.6

tar -zxvf redis-6.2.6.tar.gz -C /usr/local/soft/

2、安装编译所需的依赖

由于redis底层使用c语言编写的,所以我们在编译redis 安装包的时候需要

下载编译c语言的 gcc

yum install -y gcc-c++ gcc tcl

3、编译并安装Redis

# 创建一个目录 用于保存编译后的结果
mkdir -p /usr/local/soft/redis
cd /usr/local/soft/redis-6.2.6
make PREFIX=/usr/local/soft/redis install

4、配置环境变量

配置环境变量便于全局使用

# 编辑文件
vim /etc/profile
​
# 加入以下内容
JAVA_HOME=/usr/local/soft/jdk1.8.0_171
REDIS_HOME=/usr/local/soft/redis
export PATH=$JAVA_HOME/bin:$REDIS_HOME/bin:$PATH
​
# 重新加载环境变量
source /etc/profile

5、复制配置文件

cp /usr/local/soft/redis-6.2.6/redis.conf /usr/local/soft/redis/

6、修改配置文件

  • 编辑文件

    vim /usr/local/soft/redis/redis.conf
  • 修改以下内容

    # 将daemonize的值改为yes 让redis以后台方式启动
    daemonize yes
    ​
    # 开放远程登录
    # 将bind ip 设置为 bind 0.0.0.0 -::1
    bind 0.0.0.0 -::1
    ​
    # 将 protected-mode yes 注释掉,关闭保护模式
    # protected-mode yes
    ​
    # 设置Redis日志文件地址
    logfile "/usr/local/soft/redis/redis.log"

7、编辑service文件

之后可通过systemctl管理redis进程

  • 编辑配置文件

    # 切换目录
    cd /usr/lib/systemd/system
    # 新建并编辑文件
    vim redis.service
  • 加入以下配置

    [Unit]
    Description=Redis persistent key-value database
    After=network.target
    After=network-online.target
    Wants=network-online.target
    ​
    [Service]
    Type=forking
    PIDFile=/var/run/redis_6379.pid
    ExecStart=/usr/local/soft/redis/bin/redis-server /usr/local/soft/redis/redis.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    ​
    [Install]
    WantedBy=multi-user.target

8、启动、停止、重启Redis服务

  • 启动

    systemctl start redis
  • 停止

    systemctl stop redis
  • 重启

    systemctl restart redis
  • 开机自启(可选)

    systemctl enable redis

三. redis中String类型学习

1.redis中的数据类型

redis 中的数据类型除了字符串之外,全都是数据结构

其中列表相当于java中的list 集合相当于set集合,散列相当于hash,有序集合相当于hashset

Redis key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值

Key取值原则 键值不需要太长,消耗内存,且在数据中查找这类键值的计算成本较高 键值不宜过短,可读性较差

字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据 例如: 一张JPEG格式的图片或者一个序列化的Ruby对象

一个字符串类型的值最多能存储512M字节的内容

登录客户端后,获取帮助

Help

Help <tab>

Help set

Help @string

redis中的结构虽然有很多 ,但是归根结底还是一种数据库,所以学习命令的重点仍然是增删查改

2.redis中String类型的命令

设置字符串值

String类型中的存储形式都是k-v格式的

并且所书写的命令大小写不敏感,而key和value的值大小写敏感

SET key value [EX seconds] [PX milliseconds] [NX|XX]

nx = if not exist

xx = if exist

EX 设置过期时间,秒,等同于SETEX key seconds value PX 设置过期时间,毫秒,等同于PSETEX key milliseconds value NX 键不存在,才能设置,等同于SETNX key value XX 键存在时,才能设置

在使用setnx 时不可在后面写上时间,而在使用setxx时必须写上时间

设置多个键的字符串值 MSET key value [key value ...] 键不存在时,设置字符串值 MSETNX key value [key value ...] 注意:这是原子操作

过期 Redis中可以给Key设置一个生存时间(秒或毫秒),当达到这个时长后,这些键值将会被自动删除 设置多少秒或者毫秒后过期 EXPIRE key seconds

这里指定的是秒数

PEXPIRE key milliseconds

这里指定是毫秒数

设置在指定Unix时间戳过期 EXPIREAT key timestamp PEXPIREAT key milliseconds-timestamp

删除过期 PERSIST key

一般指定时间过期的key都会在时间结束后就在redis中消失,那么这里的删除过期是什么意思呢

这里的删除过期是指在指定key在指定时间内过期后,在时间没到的情况下输入命令,就会使原本在指定时间消失的key永久存在,从而消除过期定时

生存时间 Time To Live,Key的剩余生存时间

查看剩余生存时间 TTL key

查看还有多少秒

PTTL key

查看还有多少毫秒

key存在但没有设置TTL,返回-1 key存在,但还在生存期内,返回剩余的秒或者毫秒 key曾经存在,但已经消亡,返回-2(2.8版本之前返回-1)

查找键 KEYS pattern

pattern取值

  • 任意长度字符 ? 任意一个字符 [] 字符集合,表示可以是集合中的任意一个

键类型 TYPE key

键是否存在 EXISTS key

如果key存在,则返回1,如果不存在,则返回0

键重命名 RENAME key newkey

RENAMENX key newkey

如果不存在 ,就创建新的

键删除 DEL key [key ...]

获取值 GET key 获取多个给定的键的值 MGET key [key ...]

返回旧值并设置新值 GETSET key value

如果键不存在,就创建并赋值

字符串长度 STRLEN key

追加字符串 APPEND key value 如果键存在就追加;如果不存在就等同于SET key value

获取子字符串 GETRANGE key start end 索引值从0开始,负数表示从字符串右边向左数起,-1表示最有一个字符

start和end都是索引,并且左闭右闭

覆盖字符串 SETRANGE key offset value

offset 指的是开始位置的索引,value指的是索要替换的值,如果此时value的长度超过了原本

字符串的长度,则会往后延伸

步长1的增减 INCR key DECR key

这里用于增加补偿的value 必须是integer类型的值,否则就会报错,并且增加步长之后仍然会转换成String类型的值

步长增减 INCRBY key decrement DECR key decrement

可以指定value增加的步长

四.redis 中的bitmap位图

位图不是真正的数据类型,它是定义在字符串类型中

一个字符串类型的值最多能存储512M字节的内容

位上限:2^(9+10+10+3)=2^32b

1.bitmap基本命令

设置某一位上的值 SETBIT key offset value offset偏移量,从0开始 value不写,默认是0

由于位图中的数据存储是通过二进制的字节存储的,所以offset表示的是从0开始的索引,value的值表示的是该位上置0还是置1,

而在取值时表现出来的则是存储的二进制值转换成的十六进制,当此时的值对应ascii码表中的某个值时,则会表现为相对应的符号

获取某一位上的值 GETBIT key offset

返回指定值0或者1在指定区间上第一次出现的位置 BITPOS key bit [start] [end]

2.bitmap 位操作

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 dteskey 上 operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种 BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey

并操纵:有0得0

BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey

或操作: 有1得1

BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey

异或操作:相同得1,不同得0

BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey

非操作:全部取反

除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入 当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0 空的 key 也被看作是包含 0 的字符串序列 思考:a位或b是什么?

统计指定位区间上值为1的个数 BITCOUNT key [start] [end] 从左向右从0开始,注意官方start、end是位,测试后是字节 BITCOUNT testkey 0 0表示从索引为0个字节到索引为0个字节,就是第一个字节的统计 BITCOUNT testkey 0 -1等同于BITCOUNT testkey 最常用的就是 BITCOUNT testkey

如下图中 a的十六进制对应的ascii码值为61 写成二进制就是 11000001

而 b 的十六进制对应的ascii码值为62 写成二进制就是11000010

因为start end 表示的是字节的索引 ,所以 bitcount k2 0 1 表示的就是第一个字节和第二个字节中的位数中1的次数 ,即 3 + 3 =6

注意 : xshell中我们设置了默认编码为utf-8,所以我们在redis中写入中文可以识别,但是在删除中文时,由于中文在utf-8编码中一个占三个字节,而在redis中按一次删除键只会删除一个字节,也就是说,按三次删除键才会删除掉一个中文字符

3.bitmap 库的操作及认识

在redis中并没有表的概念,但是有库的概念。在redis中系统默认有16个库

登录不同的库 redis-cli --help redis-cli -n 2

在登陆的情况下切换数据库

select index

清除当前库数据 FLUSHDB

清除所有库中的数据 FLUSHALL

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值