Redis 数据库 集锦(redis数据库基本操作)
mhr18 2024-11-07 10:52 18 浏览 0 评论
Redis(远程字典服务器)
以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容;
使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高。
一:Redis 基本使用
1 启动和关闭
(1)启动:redis-server
(2)关闭:redis-cli SHUTDOWN(这样可以保存数据,强行停止会丢失数据)
(3)命令行客户端
#1:将命令作为redis-cli的参数执行
$redis-cli -h 127.0.0.1 -p 6379
$redis-cli PING
#2:进入交互模式
$redis-cli
127.0.0.1:6379>PING
PONG
127.0.0.0:6379>ECHO hello
“hello”
(4)多数据库
Redis 默认支持16个数据库,从0开始数字递增命名。
>> SELECT 1
>> SELECT来选择使用那个数据库。
二:基础命令
1 设置键和值
通过 SET key values来设置一个新的键值对
>SET bar1
>MSET bar1 a bar2 b 同时设置多个
2 获得符合规则的键名列表
通过KEYS patten来获取key所对应的value
> KEYS *
>这里的pattern 支持glob 风格的通配符格式
>GET bar 存在返回对应的value值,没有返回nil值,表示空的意思。
>MGET bar1 bar2 同时获得多个
3 判断一个键是否存在
EXISTS key 如果键存在则返回整数类型1,否则返回0;
>EXISTS bar
4 对键重命名
RENAME key new_key 对键值重新命名
> RENAME fo1 fo11
5 设置key 的过期时间
#通过EXPIRE key seconds 来设置过期时间
>SET bar bd
> EXPIRE bd 1000
#TTL可以查看key还剩余的时间,-1表示永久,-2表示不存在
>TTL bd
#让键重新变永久,成功返回1,否则返回0,表示键不存在或者本身就是永久的
>PERSIST bar
#通过SET key value EX seconds 来设置过期时间
> SET bar 123 EX 2000 也可以顺便设置时间
#或者SETEX key seconds values 来设置过期时间
>SETEX bar 2000 123
6获取键值的数据类型
使用TYPE key 获取键值的数据类型,Redis 中有5种数据类型,因此返回的也是这5种数据类型。
>SET foo 1
>TYPE foo
7 删除键
DEL key 可以删除一个或多个键,返回值是删除的键的个数
> DEL bar
DEL命令不支持通配符,但可以结合Linus 的管道和xargs命令自己实现删除所有符合规则的键。
比如要删除所有以user开头的键,:
$ redis-cli KEYS”user*” | xargs redis-cli DEL
另外由于DEL命令支持多个键作为参数,所以还可以执行
$ resdis-cli DEL redis-cli KEYS”user*”
这是同样的效果但性能更好
8 清空所有数据
Redis 数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中的所有数据。
三:数据类型
1字符串类型
字符串类型是Redis 的基本数据类型,使用SET生成的键值对,其value就是字符串类型。字符串类型可以存储任何形式的字符串。
>SET num1
>APPEND num2 添加字符
#如果value 值是字符,还可以进行加减。
> INCR num #加1
>DECR num #减1
# +整数
>INCRBY num 10
# -整数
>DECRBY num 5
2 列表-list
# 添加元素
(1)LPUSH 左边添加 (栈 先进后出)
> LPUSH myli 3 4 5
(2) RPUSH 右边添加(队列 先进先出)
>RPUSH myli 2 1
# 获取列表长度
>LLEN
Myli
# 查看指定位置元素
>LINDEX myli 3
# 获取列表片段
>LRANGE myli 0 5
>LRANGE myli 0 -1
# 弹出元素
>LPOP myli 从左边弹出元素
>RPOP myli 从右边弹出元素
LREM key count value
> LREM myli 2 1 当count > 0 时LREM命令会从列表左边开始删除前count个值为value 的元素
>LREM myli -1 2 当count < 0 时LREM命令会从列表右边开始删除前count个值为value 的元素
>LREM myli 0 4 当count = 0 时LREM命令会删除所有值为value 的元素
3 哈希类型-hash
散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,换句话说,散列类型不能嵌套其他的数据类型。一个散列类型键可以包含至多232--1个字段。
Name ---- budong
User age ------ 16
Size ---- 180
(1)设置和获取
HSET key field value 设置
>HSET bd name budong
>HSET bd age 18
HGET key field 获取
>HFET bd name
HMSET key field value
>HMSET ks name kongshan age 16 设置多个
HMGET key field
>HMGET ks name age 获取多个
>HKEYS bd 获取所有keys
>HVALUES bd 获取所有value
HGETALL key
>HGETALL bd 获取所有key和value
>HLEN bd 获取filed 个数。
(2)判断字段是否存在
>HEXISTS key field
>HEXISTS bd size 存在返回1 不存在返回0
>HSETNX bd size 180 不存在是添加,存在什么也不做。
(3)增加数字
>HINCRBY key field increment
> HINCRBY bd age 2
(4)删除字段
> HDEL key field ... 删除一个/多个字段
>HDEL bd size
4 集合---set
(1)增加,查找和删除元素
SADD key member 增加元素
>SADD se1 1 2 3 a b
SREM key member 删除元素
>SREM sel 2 删除指定元素
SPOP key 随机删除count 个元素
>SPOP sel 2 随机删除两个元素
SISMEMBERS set 1 判断元素是否存在
SMEMBERS key 获取所有元素
>SMEMBERS set 1
SCARD key 获取集合元素个数
SCARD set 1
随机获取count 个数元素count 为正数,返回count 个不重复数,为负数时可能出现重复数据
SRANDMEMBER key
>SRANDMEMBER se 2 3
(2)交集
SINTER key1 key2....
> SINTER se1 se2 求se1和se2交集
SINTERSTORE destination key1 key2 ...
> SINTERSTORE se3 se2 se1 将交集保存到se3中。
(3)并集
SUNION key1 key2
>SUNION se1 se2
SUNIONSTORE destination key1 key2
>SUNIONSTORE se4 se1 se2 将并集保存到se4
(4)差集
SDIFF key1 key2
>SDIFF key1 key2
SDIFFSTORE destination key1 key2
>SDIFFSTORE se5 se2 se1 将差集保存到se5
四:有序集合z-set
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,可以让我们做与分数有关的操作。
1 增加,获取和删除元素
ZADD key score member
>ZADD math 90 bd 86 ks 88 yf
ZADD 还可以用双精度浮点数,+int表示正无穷 -int表示负无穷。
ZCARD key
> ZCARD math 查看元素个数
ZSCORE key member 获取元素分数(权重)
> ZSCORE math bd
从小到大打印,加上WITHHCORES 同时打印分数
ZRANGE key start stop [WITHSCORES]
>ZRANGE math 0 -1
而:ZREVRANGE key start stop 从大到小打印
ZREM key member 移除元素
>ZREM math yf
2获取指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
按照元素分数从小到大的顺序返回分数在min和max 之间(包含min,max)LIMT向后偏移offset 个元素,并且只获取前count个元素
>ZRANGEBYSCORE math 70 90
>ZRANGEBYSCORE math 70 (90 LIMT 1 2 不取90)
3获取指定分数范围的元素个数
ZCOUNT key min max
> ZCOUNT math 70 90
4增加某个元素的分数
ZINCRBY key increment member
> ZINCRBY math 5 bd 增加5分,分数也可以是负数,表示减分。
5 按照排名范围删除元素
ZREMRANGEBYRANK key start stop
>ZADD test 1 a 2 b 3 c 4 d 5 e 6 f
>ZREMRANGEBYRANK test 0 2 删除排名1---3的元素
>ZRANGE test 0 -1
6 按照分数范围删除元素
ZREMRANGEBYSCORE key min max
>ZADD test 1 a 2 b 3 c 4 d 5 e 6 f
>ZREMRANGEBYSCORE test (3 5 删除分数大于3小于5的元素)
7计算有序集合的交集
ZINTERSTORE destination numkeys key 计算多个有序集合的交集并将结果存储在destination 中(同样以有序集合类型存储),返回值为destination 键中的元素个数。destination 键中元素的分数是由AGGREGATE 参数决定的,默认是SUM.
> ZADD s2 19 a 40 b
>ZINTERSTORE s3 2 s1 s2
>同样也有并集 ZUNIONSTORE 用法类似;
相关推荐
- B站收藏视频失效?mybili 收藏夹备份神器完整部署指南
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙很多B站用户都有过类似经历:自己精心收藏的视频突然“消失”,点开一看不是“已被删除”,就是“因UP主设置不可见”。而B站并不会主动通知...
- 中间件推荐初始化配置
-
Redis推荐初始化配置bind0.0.0.0protected-modeyesport6379tcp-backlog511timeout300tcp-keepalive300...
- Redis中缓存穿透问题与解决方法
-
缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...
- 后端开发必看!Redis 哨兵机制如何保障系统高可用?
-
你是否曾在项目中遇到过Redis主服务器突然宕机,导致整个业务系统出现数据读取异常、响应延迟甚至服务中断的情况?面对这样的突发状况,作为互联网大厂的后端开发人员,如何快速恢复服务、保障系统的高可用...
- Redis合集-大Key处理建议
-
以下是Redis大Key问题的全流程解决方案,涵盖检测、处理、优化及预防策略,结合代码示例和最佳实践:一、大Key的定义与风险1.大Key判定标准数据类型大Key阈值风险场景S...
- 深入解析跳跃表:Redis里的"老六"数据结构,专治各种不服
-
大家好,我是你们的码农段子手,今天要给大家讲一个Redis世界里最会"跳科目三"的数据结构——跳跃表(SkipList)。这货表面上是个青铜,实际上是个王者,连红黑树见了都要喊声大哥。...
- Redis 中 AOF 持久化技术原理全解析,看完你就懂了!
-
你在使用Redis的过程中,有没有担心过数据丢失的问题?尤其是在服务器突然宕机、意外断电等情况发生时,那些还没来得及持久化的数据,是不是让你夜不能寐?别担心,Redis的AOF持久化技术就是...
- Redis合集-必备的几款运维工具
-
Redis在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来,从这三个方面,介绍一些工具。先来学习下监控Redis实时...
- 别再纠结线程池大小 + 线程数量了,没有固定公式的!
-
我们在百度上能很轻易地搜索到以下线程池设置大小的理论:在一台服务器上我们按照以下设置CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2你不会真的按照这个理论来设置线程池的...
- 网络编程—IO多路复用详解
-
假如你想了解IO多路复用,那本文或许可以帮助你本文的最大目的就是想要把select、epoll在执行过程中干了什么叙述出来,所以具体的代码不会涉及,毕竟不同语言的接口有所区别。基础知识IO多路复用涉及...
- 5分钟学会C/C++多线程编程进程和线程
-
前言对线程有基本的理解简单的C++面向过程编程能力创造单个简单的线程。创造单个带参数的线程。如何等待线程结束。创造多个线程,并使用互斥量来防止资源抢占。会使用之后,直接跳到“汇总”,复制模板来用就行...
- 尽情阅读,技术进阶,详解mmap的原理
-
1.一句话概括mmapmmap的作用,在应用这一层,是让你把文件的某一段,当作内存一样来访问。将文件映射到物理内存,将进程虚拟空间映射到那块内存。这样,进程不仅能像访问内存一样读写文件,多个进程...
- C++11多线程知识点总结
-
一、多线程的基本概念1、进程与线程的区别和联系进程:进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程;线程:是运行中的实际的任务执行者。可以说,进程中包含了多...
- 微服务高可用的2个关键技巧,你一定用得上
-
概述上一篇文章讲了一个朋友公司使用SpringCloud架构遇到问题的一个真实案例,虽然不是什么大的技术问题,但如果对一些东西理解的不深刻,还真会犯一些错误。这篇文章我们来聊聊在微服务架构中,到底如...
- Java线程间如何共享与传递数据
-
1、背景在日常SpringBoot应用或者Java应用开发中,使用多线程编程有很多好处,比如可以同时处理多个任务,提高程序的并发性;可以充分利用计算机的多核处理器,使得程序能够更好地利用计算机的资源,...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)