【Redis 基础内容+关键字 01】
一、Redis(Remote DIctionary Server 远程字典服务器)
1、完全开源,用C编写,是一个高性能的(key/value)分布式数据库,基于内存运行,长被称为:数据结构服务器
2、redis与其他key-value缓存产品有一下三个特点
- redis支持数据的持久层,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- redis支持数据的备份,即master-slave模式的数据备份
二、redis的安装/启动/关闭
---->安装
1、redis官网下载http://redis.cn/安装包
2、将下载后的redis-6.0.6.tar.gz上传到linux的opt目录下
3、在opt目录下解压
4、解压后进入redis目录:cd redis-6.0.6.
5、在redis-6.0.6目录下执行make命令
运行make命令时出现错误(需要安装gcc)
yum install gcc-c++ (安装后gcc -v 如果查看版本为4.5.8,此版本太低,需要执行以下命令升级)
- yum -y install centos-release-scl
- yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
- scl enable devtoolset-9 bash
- echo “source /opt/rh/devtoolset-9/enable” >> /etc/profile
- gcc -v
6、执行make (如果出现jemalloc/jemalloc.h:没有那个文件或目录错误)
执行:运行make distclean之后再make
7、执行make install
8、查看默认安装目录:usr/local/bin --->包含以下文件
redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动后执行)
redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
redis-check-dump:修复有问题的dump.rdb文件
redis-cli:客户端,操作入口
redis-sentinel:redis集群使用
redis-server:Redis服务器启动命令
---->启动
1、进入redis文件夹内
cd /opt/redis-6.0.6
注意:linux下修改配置文件,一般需要备份初始文件,所以我们需要备份redis.conf文件
[root@bogon redis-6.0.6]# cp redis.conf ../Bak_redis_conf/
2、修改备份的redis.conf文件,将里面的daemonize no 改成 yes,让服务在后台启动
[root@bogon bak_redis_conf]# vi redis.conf ################################# GENERAL # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize yes
3、进入到redis的默认安装目录,启动修改的redis.conf文件
cd /usr/local/bin/ //启动redis redis-server /opt/bak_redis_conf/redis.conf
//登录redis
[root@bogon bin]# redis-cli -p 637
4、连通测试
127.0.0.1:6379> set k1 hello OK 127.0.0.1:6379> get k1 "hello"
127.0.0.1:6379> ping
PONG
5、关闭
单实例关闭:redis-cli shutdown
多实例关闭,指定端口关闭:redis-cli -p 6379 shutdown
三、redis启动后的基础知识
1、单进程
2、默认16个数据库,类似数组小标从零开始,默认0号库
3、select切换数据库,select 1 -->切换到第二个库
4、dbsize查看当前数据库的key的数量,keys * 查看所有key,keys k? 查看包含k的所有key
5、flushdb清空当前库,flushall清空所有库
6、默认端口6379
四、Redis的五大数据类型
1、String字符串
String是redis最基本的类型,一个key对应一个value,一个redis中字符串value最多可以是512m
String类型是二进制安全的,因此redis的String可以包含任何书库,比如jpg图片或者序列化的对象
2、hash(哈希,类似Java里的map)
是一个键值对几个,hash是一个String类型的field和value的映射表,hash特别适合存储对象
类似Java里面的Map<String,Object>
3、list(列表)
列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素导列表的头部(z左边)或者尾部(右边),他的底层实际是个链表
4、set(集合)
redis的set是String类型的无序集合,它是通过hashTable实现的
5、zset(sorted set 有序集合)
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
# 把 list 类 型 key里 的 数 据 导 出 来 :
redis-cli -a Sexyte@2013 -n 2 lrange Access_token 0 -1 > ./Access_token.csv
# 把 set类 型 key里 的 数 据 导 出 来 :
redis-cli -a Sexyte@2013 -n 2 smembers createOrderToken >csv/createOrderToken.csv
四、详解五大类型
1、key 关键字 -->常用
keys * 查看当前库的所有key
exists key的名字,判某个key是否存在
127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k4 (integer) 0
move key db 移动当前库的key到目标库
ttl key 查看还有多毫秒过期,-1代表永不过期,-2表示已经过期
expire key 秒钟:为给定的key设置过期时间
type key 查看key是什么类型
给同一个key先后赋不同的值,后赋的值会覆盖掉之前的值
2、String类型
单值单value
常用的命令
--> set/get/del/append/strlen (设置/获取/删除/增加/获取长度)
--> incr/decr/incrby/decrby 一定要是数字才能进行相加
--> getrange 获取指定区间范围内的值,类似between ... and的关系 (从0 到-1表示全部)
--> setrange 设置指定区间范围内的值,格式是setrange key值 具体值
--> setex 设置key和value值并加上有效时间
--> setnx 设置key/value时判断是否存在,存在设置不成功,不存在设置成功
--> mset/mget/msetnx 设置/获取多个key、value
3、List列表(有序可)
单值多value
-- > lpush /rpush/lrange
-->lpop/rpop 移除list的value,lpop从左移除,rpop是从右移除
--> llen 列表长度
--> lindex 按照索引下标获取元素(从上到下)
--> lrem 删除N个value
--> ltrim key 开始index 结束index (截取开始到结束的index内容)
-->del key 删除key
--> rpoplpush 把第一个列表最右边的value移动到第二个列表的最左边value的左侧
--> linsert key before/after 值1 值2 在值1的前面/后面插入某个值
--> lset key index value 按照索引替换值
总结:
- list是一个字符串链表,left、right都可以插入添加,
- 如果键不存在,创建新的链表
- 如果键已经存在,新增内容
- 如果值全部移除,对应的键也就消失了
- 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很低了
4、set集合 (无序不能重复)
单值多value
--> sadd/smembers/sismember 添加列表/显示列表
--> scard 获取集合里面的元素个数
--> srem key value 删除集合内的元素
--> srandmember key count 随机抽取集合内的值
--> spop key 随机出栈
--> smove key1 key2 将key1的某个值赋值给key2
--> sdiff差集、slnter交集、sunlon并集
5、hash (KV模式不变,但V是一个键值对)
--> hset/hget/hmset/hmget/hgetall/hdel
--> hlen 长度
--> hexists key 判断key里面某个值是否存在
--> hkeys/hvals 查看所有的key和value
--> hincrby/hincrbyfloat 整数/小数相加
--> hsetnx 设置值的时候判断是否存在,存在增加失败,不存在增加成功
6、ZSet (sorted set)
在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2 (score1 v1 是一对value,则每两个是一个value)
--> zadd/zrange
--> zrangebyscore key 开始score 结束score
工作中用到的命令:
redis中: set集合: 获取集合内元素的总数:scard yuany_checkSupport 随机抽取集合内的值:srandmember yuany_checkSupport 3 list集合: 获取集合内元素的总数:llen yuany_checkSupport 获取列表集合内的值:lrange yuany_checkSupport 0 -1 0 -1是全部,如果想获取其中几个 0 3 查看csv文件有多少刚命令:wc -l Mobile.csv
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫