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(集 ...
随机推荐
- POI 操作sheet.shiftRows注意点
sheet.shiftRows后使用getRow/getCell会导致NullPointException 正确使用应该是CreateRow CreateCell
- Android Tools Project Site
Android Tools Project Site Search this site Projects Overview Screenshots Release Status Roadmap D ...
- 基于Java Swing和BouncyCastle的证书生成工具
"Almost no one will remember what he had just not interested." - Nobody "几乎没有人会记得他所丝毫 ...
- css 10-13
1.背影样式 backgroud-color 背景颜色 backgroud-color :red backgroud-image 背 ...
- Maven 项目工程
maven打包java --jar1.安装jdk2.安装maven --安装非常简单 网上教程很多,此步骤忽略-- 3.配置jdk/maven环境变量 # java_jdk export JAVA ...
- 线程的查看方式&运行原理
观察多个线程同时运行 主要是理解 交替执行 谁先谁后,不由我们控制 查看进程线程的方法 windows 任务管理器可以查看进程和线程数,也可以用来杀死进程 tasklist 查看进程 taskkill ...
- [Python急救站课程]计算1!+2!+3!+......+10!
计算1!+2!+3!+......+10!程序 sum, tmp = 0, 1 for i in range(1, 11): tmp *= i sum += tmp print("运算结果是 ...
- Spring5学习随笔-Spring5的基本介绍、工厂设计模式
学习视频:[孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索.学不会Spring?只因你未遇见孙哥] Spring系列-工厂 第一章.引言 Spring I ...
- Mariadb 10.4 root 用户无法使用无密码登录的原因
Mariadb现在是网站建设中使用的主流数据库之一,当前它很多个版本:10.1.10.2.10.3.10.4. 其中10.1和10.2在程序中使用root用户登录连接数据库都没有什么问题. 如果是10 ...
- Netty源码学习6——netty编码解码器&粘包半包问题的解决
系列文章目录和关于我 零丶引入 经过<Netty源码学习4--服务端是处理新连接的&netty的reactor模式和<Netty源码学习5--服务端是如何读取数据的>的学习, ...