Redis的五大数据类型(简单使用)
1:Redis的简单介绍?
- Redis(Remote Dictionary Server ):即远程字典服务
- 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,并提供多种语言的API。
- 从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助
2:Redis的性能:
- 由官方的bench-mark数据测试:
- 测试完成了50个并发执行100000个请求。
- 设置和获取的值是一个256字节字符串。
- Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
- 文本执行使用loopback接口(127.0.0.1)。
- 结果:读的速度是110000次/s,写的速度是81000次/s
- redis是基于内存的,内存的读写速度非常快 ;
- redis是单线程的,省去了很多上下文切换线程的时间;
- redis因为是基于内存的 不涉及io操作 所以单线程效率是最高的
回归正题
五大数据类型(狂神的redis笔记中的话):
- Redis是一个开源(BSD许可)
- 内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。
- 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。
- 内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区
- Redis中的数据都是键值对的存储方式 key-value 然后通过进行对Redis-key的操作,来完成对数据库中数据的操作。
1:String(字符串类型):
- 字符串类型 也是redis中最常用的类型
- 相信大家绝对不陌生 来让我们看看redis中 string的作用与它的方法吧:
- 下面方法图片来自于:https://blog.csdn.net/DDDDeng_/article/details/108118544
常用方法:
方法实现:
127.0.0.1:6379> select 0 #切换数据库
OK
127.0.0.1:6379> set name jie #给name赋值
OK
127.0.0.1:6379> get name #读取值
"jie"
127.0.0.1:6379> move name 1 #把值移动到其他数据库中
(integer) 1
127.0.0.1:6379> EXISTS name #查找当前数据库的name
(integer) 0
127.0.0.1:6379> select 1 #切换到1数据库
OK
127.0.0.1:6379[1]> EXISTS name #查找数据库的name
(integer) 1
127.0.0.1:6379[1]> set name jie2
OK
127.0.0.1:6379[1]> keys * #查找所有key
1) "name"
127.0.0.1:6379[1]> del name #删除name
(integer) 1
127.0.0.1:6379[1]> get name
(nil)
127.0.0.1:6379[1]> set age 18
OK
127.0.0.1:6379[1]> EXPIRE age 10 #age设置过期时间
(integer) 1
127.0.0.1:6379[1]> ttl age #查看过期时间
(integer) 3
127.0.0.1:6379[1]> ttl age #过期了
(integer) -2
127.0.0.1:6379[1]> get age
(nil)
127.0.0.1:6379[1]> keys *
(empty array)
127.0.0.1:6379[1]> set name jie
OK
127.0.0.1:6379[1]> type name #查看数据类型
string
这只是一些常用方法:其他方法可以查看官网文档: http://www.redis.cn/commands.html
2:List(列表):
- 方法以l开头
常用方法:
下面是实现过程:
127.0.0.1:6379[2]> lpush jielist 1 #往jielist中添加值
(integer) 1
127.0.0.1:6379[2]> lpush jielist 2
(integer) 2
127.0.0.1:6379[2]> LRANGE jielist 1 2 #查看jielist中的1——5值
3) "2"
4) "1"
127.0.0.1:6379[2]> LRANGE jielist 0 -1 #查看jielist中的所有值
4) "2"
5) "1"
127.0.0.1:6379[2]> LPUSHx jielist 5 6 #向jielist左边 push 5 6值
(integer) 7
127.0.0.1:6379[2]> LINSERT jielist after 2 50 #往jielist的2后插入50
(integer) 11
127.0.0.1:6379[2]> LLEN jielist #查看jielist中的长度
(integer) 11
127.0.0.1:6379[2]> LINDEX jielist 5 #获取下标为5的元素
"5"
127.0.0.1:6379[2]> lset jielist 5 12 #将下标为5的元素赋值为12
OK
127.0.0.1:6379[2]> lrange jielist 0 -1
1) "9"
2) "10"
3) "10"
4) "6"
5) "5"
6) "12"
7) "4"
8) "3"
9) "2"
10) "50"
11) "1"
127.0.0.1:6379[2]> lpop jielist #左边弹出元素
"9"127.0.0.1:6379[2]> rpop jielist #右边弹出元素
"1"
127.0.0.1:6379[2]> RPOPLPUSH jielist jie2list #将jielist的最后一个值弹出移动到jie2list中
"50"
127.0.0.1:6379[2]> LRANGE jie2list 0 -1
1) "50"
127.0.0.1:6379[2]> ltrim jielist 0 4 #截取0~4的部分
OK
127.0.0.1:6379[2]> lrange jielist 0 -1
1) "12"
2) "4"
127.0.0.1:6379[2]> LPUSH jielist 5
(integer) 2
127.0.0.1:6379[2]> LPUSH jielist 5
(integer) 3
127.0.0.1:6379[2]> lrem jielist 2 5 #从头部搜索 删除至多两个5
(integer) 2
127.0.0.1:6379[2]> lrange jielist 0 -1
1) "12"
127.0.0.1:6379[2]> LPUSH jielist 5
(integer) 2
127.0.0.1:6379[2]> LPUSH jielist 5
(integer) 3
127.0.0.1:6379[2]> LPUSH jielist 5
(integer) 4
127.0.0.1:6379[2]> LPUSH jielist 5
(integer) 5
127.0.0.1:6379[2]> lrem jielist -2 5 #从尾部搜索 删除至多两个5
(integer) 2
127.0.0.1:6379[2]> LRANGE jielist 0 -1
1) "5"
2) "5"
3) "12"
127.0.0.1:6379[2]> blpop jielist timeout 1 #移除并获取第一个元素 如果没有元素 则会堵塞 等待超时弹出为止
1) "jielist"
2) "5"
127.0.0.1:6379[2]>
可以把list当做链表
3:Set(集合):
- 常用方法:以s开头:

127.0.0.1:6379[8]> sadd set 1 2 3 4 #向set中添加4个数据
(integer) 4
127.0.0.1:6379[8]> SCArd set #查看set中的元素个数
(integer) 4
127.0.0.1:6379[8]> smembers set #查看set的所有元素
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379[8]> SISMEMBER set 10 #查看元素是否是set中的
(integer) 0 #不是为0
127.0.0.1:6379[8]> SISMEMBER set 2
(integer) 1 #是为1
127.0.0.1:6379[8]> SRANDMEMBER set 4 #随机返回4个元素
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379[8]> spop set 1 #随机移除1为元素
1) "4"127.0.0.1:6379[8]> smove set myset 1 #将set中的1移动到myset中
(integer) 1
127.0.0.1:6379[8]> SMEMBERS myset
1) "1"
127.0.0.1:6379[8]> srem set 2 #在set中移除2
(integer) 1
127.0.0.1:6379[8]> srem set 3
(integer) 1
127.0.0.1:6379[8]> SMEMBERS set
(empty array)
127.0.0.1:6379[8]> sadd set 1 2 3 4 #赋值
(integer) 4
127.0.0.1:6379[8]> sadd set1 3 4 5 6
(integer) 4
127.0.0.1:6379[8]> sadd set2 2 3 4
(integer) 3
127.0.0.1:6379[8]> sdiff set set1 set2 #返回所有的差集
1) "1"
127.0.0.1:6379[8]> sdiff set set1
1) "1"
2) "2"
127.0.0.1:6379[8]> sdiff set1 set2
1) "5"
2) "6"
127.0.0.1:6379[8]> sinter set set1 #求 set和set1的交集
1) "3"
2) "4"
127.0.0.1:6379[8]> sinter set set2
1) "2"
2) "3"
3) "4"
127.0.0.1:6379[8]> SUNION set set1 求set 和set1 的并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379[8]> SUNION set set2
1) "1"
2) "2"
3) "3"
4) "4"
特点: 无序 不可重复 类似于java中的set集合 redis中的set集合是哈希表实现的;
4:Hash(哈希):
- hash和之前的区别就是 之前是key value的 然后现在是key map(key value)
- 方法以h开头
常用方法:
方法实现:
127.0.0.1:6379[5]> hset hash name jie #生成一个hash对象设置name为jie
(integer) 1
127.0.0.1:6379[5]> hset hash name jie
(integer) 0
127.0.0.1:6379[5]> hset hash age 10 #设age为10
(integer) 1
127.0.0.1:6379[5]> hset hash key jiejie
(integer) 1
127.0.0.1:6379[5]> HEXISTS hash name #查看name是否在hash中存在
(integer) 1
127.0.0.1:6379[5]> hmget hash name 查看 hash中的name的value
1) "jie"
127.0.0.1:6379[5]> hmget hash name age key #获得指定元素的多个value
1) "jie"
2) "10"
3) "jiejie"
127.0.0.1:6379[5]> HGETall hash #获得hash中所有key value
1) "name"
2) "jie"
3) "age"
4) "10"
5) "key"
6) "jiejie"
127.0.0.1:6379[5]> hkeys hash #获得hash中的所有key
1) "name"
2) "age"
3) "key"
127.0.0.1:6379[5]> hvals hash #获得hash中的所有value
1) "jie"
2) "10"
3) "jiejie"
127.0.0.1:6379[5]> hdel hash name #删除hash中的name
(integer) 1
127.0.0.1:6379[5]> HINCRBY hash age 10 #hash中的age值加10
(integer) 20
127.0.0.1:6379[5]> HINCRBY hash key 20 #非整数型不可 会报错
(error) ERR hash value is not an integer
Hash适合对象的存储 适合经常变动的信息
5:Zset(有序集合):
- 每个元素都会关联一个double类型的分数(score)。
- redis正是通过分数来为集合中的成员进行从小到大的排序。
- score相同:按字典顺序排序
- 有序集合的score可以相同但成员不能相同
- 方法以z开头
方法:
方法实现:
127.0.0.1:6379[2]> zadd zset1 1 lu 2 yun 3 jie #往zset1中添加元素lu 记得给数值来作为以后排序的标志
(integer) 3
127.0.0.1:6379[2]> ZCARD zset1 #查看zset1中有几个元素
(integer) 3
127.0.0.1:6379[2]> ZCOUNT zset1 0 2 #查看0到2区间的元素个数
(integer) 2
127.0.0.1:6379[2]> ZINCRBY zset1 2 lu #在lu的score+2
"3"
127.0.0.1:6379[2]> ZSCORE zset1 jie#查看jie的score
"3"
127.0.0.1:6379[2]> zrange zset1 0 -1#获取全部成员
1) "yun"
2) "jie"
3) "lu"
127.0.0.1:6379[2]> ZRANGEBYLEX zset1 - + #返回所有成员
1) "yun"
2) "jie"
3) "lu"
127.0.0.1:6379[2]> ZRANGEBYLEX zset1 - + limit 0 3 #分页显示第0-3的数据
1) "yun"
2) "jie"
3) "lu"127.0.0.1:6379[2]> ZRANGEBYLEX zset1 [jie [yun #显示[jie-yun]的字典区间的成员
1) "yun"
2) "jie"
3) "lu"
127.0.0.1:6379[2]> zrem zset1 jie #删除jie
(integer) 1
127.0.0.1:6379[2]> ZREMRANGEBYrank jie 0 1 #移除 0到1的所有成员
(integer) 2
127.0.0.1:6379[2]> ZREVRANGE jie 0 2 #按score递减排序 然后按照索引 返回结果0~2
1) "c"
127.0.0.1:6379[2]> zadd jie1 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379[2]> ZREVRANGE jie1 0 3 #倒序
1) "c"
2) "b"
3) "a"127.0.0.1:6379[2]> ZRevrank jie1 b #按score递减排序 然后返回b的索引
(integer) 1
127.0.0.1:6379[2]> zadd xiaojie1 1 50 2 60 3 90
(integer) 3
127.0.0.1:6379[2]> zadd xiaojie2 1 60 2 60 3 90
(integer) 2
127.0.0.1:6379[2]> ZINTERSTORE xiaojie3 2 xiaojie1 xiaojie2 #合并两个集合然后放到xiaojie3里面
(integer) 2
127.0.0.1:6379[2]> zrange xiaojie3 0 -1 withscores #合并后的score是之前集合中所有score的和
1) "60"
2) "4"
3) "90"
4) "6"
127.0.0.1:6379[2]> zrange xiaojie3 0 -1 withscores #取一个集合的成员score最小值作为结果的1) "60"
2) "4"
3) "90"
4) "6"
今天心情阴沉 还有redis的三大特殊类型明天更!!!
Redis的五大数据类型(简单使用)的更多相关文章
- redis之五大数据类型
redis之五大数据类型 redis redis的两种链接方式 简单链接 1234 import redisconn = redis.Redis(host='10.0.0.200',port=6379 ...
- Redis(三)--- Redis的五大数据类型的底层实现
1.简介 Redis的五大数据类型也称五大数据对象:前面介绍过6大数据结构,Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject:这个对象系统包 ...
- Redis的五大数据类型以及key的相关操作命令
Redis的五大数据类型 redis的数据都是以key/value存储,所以说,五大类型指的是value的数据类型 String 字符串,作为redis的最基本数据类型 redis中的string类型 ...
- 面试官:讲讲Redis的五大数据类型?如何使用?(内含完整测试源码)
写在前面 最近面试跳槽的小伙伴有点多,给我反馈的面试情况更是千差万别,不过很多小伙伴反馈说:面试中的大部分问题都能够在我的公众号[冰河技术]中找到答案,面试过程还是挺轻松的,最终也是轻松的拿到了Off ...
- redis 哈希数据类型简单操作(实现购物车案例)
这里不累赘如何安装redis和php redis扩展,主要熟悉调用redis哈希数据类型 简单方法操作如下 1:hSet 2:hGet 4:hDel 5:hGetAll 4:hExists 5:hI ...
- 解析Redis操作五大数据类型常用命令
摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...
- Redis详解(五)------ redis的五大数据类型实现原理
前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构.在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对 ...
- Redis 详解 (五) redis的五大数据类型实现原理
目录 1.对象的类型与编码 ①.type属性 ②.encoding 属性和 *prt 指针 2.字符串对象 3.列表对象 4.哈希对象 5.集合对象 6.有序集合对象 7.五大数据类型的应用场景 8. ...
- redis的五大数据类型实现原理
1.对象的类型与编码 Redis使用前面说的五大数据类型来表示键和值,每次在Redis数据库中创建一个键值对时,至少会创建两个对象,一个是键对象,一个是值对象,而Redis中的每个对象都是由 redi ...
- redis之五大数据类型介绍
目录 redis五大数据类型 1. string(字符串) 特点: 格式: 基本操作: 2. hash(哈希) 特点: 格式: 基本操作 3. list(列表) 特点 格式 基本操作 4. set(集 ...
随机推荐
- Dubbo3应用开发—Dubbo序列化方案(Kryo、FST、FASTJSON2、ProtoBuf序列化方案的介绍和使用)
Dubbo序列化方案(Kryo.FST.FASTJSON2.ProtoBuf序列化方案的介绍和使用) 序列化简介 序列化是Dubbo在RPC中非常重要的一个组成部分,其核心作用就是把网络传输中的数据, ...
- Aho-Corasick 算法 AC自动机实现
敏感词过滤在社区发帖.网站检索.短信发送等场景下是很常见的需求,尤其是在高并发场景下如何实现敏感词过滤,都对过滤算法提出了更高的性能要求,Ahocorasick算法能够实现毫秒级的万字过滤匹配,能够很 ...
- Android news Display Owner Info on Your Android Device in Case It Gets Lost
Display Owner Info on Your Android Device in Case It Gets Lost The latest versions of Android includ ...
- 【ZT】关于字符集
utf8 全包容了gbk ,并不是说超集和子集:8i 的数据库 的 utf8 是 4位定长的字符编码:9i 和以上数据库的utf8 有4位定长AL32UTF8和 不定长的 UTF8 ,都是 ...
- .NET 8 候选版本 2 (RC2) 现已可用
.NET 8 候选版本 2 (RC2) 现已可用,并包含了许多 ASP.NET Core 的出色新改进! 这是我们计划在今年晚些时候发布的最终 .NET 8 版本之前分享的最后一个候选版本..NET ...
- 人均瑞数系列,瑞数 6 代 JS 逆向分析
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...
- APIO 2023 游记
真心话大冒险很有趣. rand 一个房间去敲门加 QQ 很有趣.这么看社恐猫好像也没那么社恐. 面到了 zpl pcq iee dx.单方面认识了很多神仙. 比赛只会写暴力,评测 queue 害人不浅 ...
- 打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态
从今年8月起,所有升级到HarmonyOS 4的手机用户在美团外卖下单后,可通过屏幕上的一个"小窗口",随时追踪到"出餐.取餐.送达"等订单状态.这个能让用户实 ...
- QT(1)- QString
QT(1)- QString 1 简介 在Qt中表示字符串的类是QString类,它存储字符串是采用的Unicode码,编码方式是使用UTF-16来进行编码的,也就是一个字符(两个字节),一个中文汉字 ...
- Mysql面试大全
说说MySQL索引的底层数据结构 MySQL索引的底层数据结构是B+树数据结构 详细介绍一下B+树的数据结构是什么样子的 B+树有三个特性 B+树是一个平衡多叉树,与平衡二叉树的每一个节点下面最多有两 ...