IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 3-Redis-八大数据类型API、事务 -> 正文阅读

[大数据]3-Redis-八大数据类型API、事务

学习途径

官网:Redis

中文网:redis中文官方网站

b站:狂神说

数据类型

五大数据类型

官网

image-20210924124520341 image-20210924152634891

String

进程号:6379

Redis命令中心(Redis commands) – Redis中国用户组(CRUG)

- 追加字符串内容;key不存在,相当于新增键值对
	append key "新增内容"
- 自增1;若key不存在,先set为0,再加1
	incr key	//increase
- 自减1
	decr key
- key值增加一个整数
	incrby key increment
- 根据下标范围截取字符串 闭区间
	getrange key 0 3   //[0,3]
    getrange key 0 -1  //截取下标0~末尾
- 替换内容
	setrange key 3 value  //从下标三开始往后替换为value
	eg: "xxx  hhh"
		SETRANGE name 3 --
		"xxx--hhh"
- setex(set with expire)  设置并追加过期时间
- setnx(set if not exist) 若不存在则设置,在分布式锁中会经常用到;是原子性的操作,要么都成功,要么都失败

- 批量设置
	mset k1 1 k2 2 k3 xdd k4 sdff
- 批量获取
	mget k1 k2 k3 k4
	msetnx k1 v1 k4 v4  //会失败,k1已存在,是原子性操作
- 先取再赋值;当前值不存在则返回null,并赋值;当前值存在则返回d
	getset key value

List

list的命令多以l开头的

list允许有重复元素

底层逻辑是Deque(双端队列)

- lpush key value
	头插
- rpush key value
	尾插
- lset key index item
	给列表指定下标关联新的键值对
	若list不存在,操作失败
	若超出索引界限,操作失败
	即只能在列表现有的元素进行更新
	
- lrange key start end
	列出元素
- lpop key
- rpop key
- lindex key index
	获取下标所指的值
- llen key
	获取列表长度
- lrem key count value
	List允许有重复元素,移除count个指定的元素
- trim list start end
	修剪,列表只保留指定区间的元素,list被改变
- rpoplpush list1 list2
	移除list1的尾端元素并将其添入list2的头部
- linsert key before/after value1 value2
	在指定列表的 value1的前/后插入值value2

Set

set的命令多以s开头

无序不重复集合

Redis命令中心(Redis commands) – Redis中国用户组(CRUG)

- sadd key value
	集合添加值
- smembers key
	查看集合的所有值
- sismember key member
	查看集合中是否有某个值
- scard key
	获取集合的长度
- SREM key member [member ...]
	移除元素
- SDIFF k1 k2
	列出k1中与k2不同的元素 差集
- sunion	并集
- sinter	交集

Hash

Map集合,key-<field域-value值>

HDEL key field [field ...]
删除一个或多个Hash的field
HEXISTS key field
判断field是否存在于hash中
HGET key field
获取hash中field的值
HGETALL key
从hash中读取全部的域和值
HINCRBY key field increment
将hash中指定域的值增加给定的数字
HINCRBYFLOAT key field increment
将hash中指定域的值增加给定的浮点数
HKEYS key
获取hash的所有键值对
HLEN key
获取hash里所有键值对的数量
HMGET key field [field ...]
获取hash里面指定字段的值
HMSET key field value [field value ...]
设置hash字段值
HSET key field value
设置hash里面一个字段的值
HSETNX key field value
设置hash的一个字段,只有当这个字段不存在时有效
HSTRLEN key field
获取hash里面指定field的长度
HVALS key
获得hash的所有值
HSCAN key cursor [MATCH pattern] [COUNT count]
迭代hash里面的元素

Zset

有序集合

添加元素时必须指定优先级(core)

- zrange start end
	列出元素,默认就是按照优先级升序
- ZRANGEBYSCORE salary -inf +inf
	从小到大列出        负无穷 正无穷

三种特殊数据类型

geospatial

城市经纬度查询-国内城市经度纬度在线查询工具 (jsons.cn)

GEOADD key longitude(经度) latitude(纬度) member [longitude latitude member ...]
添加一个或多个地理空间位置到sorted set
GEOHASH key member [member ...]
返回一个标准的地理空间的Geohash字符串
GEOPOS key member [member ...]
返回地理空间的经纬度
GEODIST key member1 member2 [unit]
返回两个地理空间之间的距离
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
查询指定经纬度为中心 指定的半径内所有的地理空间元素的集合。
	radius 半径
	WITHDIST   显示直线距离
	WITHCOORD  显示经纬度
	COUNT count 限定查询个数
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
查询指定半径内匹配到的最大距离的一个地理空间元素。中心点由指定元素定义

hyperloglog

用于做基数统计的算法

基数:一个集合中不重复的元素的数量

底层逻辑:set,元素无序不可重复

占用内存固定:只需12KB内存

PFADD key element [element ...]
将指定元素添加到HyperLogLog
PFCOUNT key [key ...]
返回基数值
PFMERGE destkey sourcekey [sourcekey ...]
合并两个集合

bitmaps

在官网还是属于String类型

记录两个状态的(0或1)都可以用这个

按位来存储的

8bit = 1字节

setbit
getbit
bitcount

事务

事务ACID原则------>**要么都成功,要么都失败

原子性

一致性

隔离性

持久性

Redis单条命令是保证原子性的,但是Redis的事务不保证原子性,Redis事务也没有隔离级别的概念

在传统的关系型数据中,只要有任意一条指令失败,则整个事务都会被撤销回滚,而在Redis中,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做,也因此得出 Redis 事务的执行不保证原子性(前提没有编译时异常)

Redis事务本质:一组命令的集合,一次性、顺序性、排他性的执行

Redis的事务:

  • 开启事务(multi)
  • 命令入队(…)
  • 执行事务(exec)

正常执行事务

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> get k2
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) OK
3) "v2"

放弃事务 discard

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)> set k4 v4
QUEUED
127.0.0.1:6379(TX)> get k4
QUEUED
127.0.0.1:6379(TX)> DISCARD
OK
127.0.0.1:6379>  get k2
"v2"
127.0.0.1:6379> get k3
(nil)

编译型异常(代码有问题,命令有错),事务中的所有命令都不会被执行

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 v1		
QUEUED
127.0.0.1:6379(TX)> getset k1			//语法错误,getset value1 value2 
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> EXEC				//执行事务报错
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k2					//所有的命令都不会执行
(nil)

运行时异常(I/O),如果事务队列存在语法性(语法没有问题),那么执行命令的时候,其他命令可以正常运行 这也验证了Redis的事务没有原子性

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set k1 "v1"		//将k1设置为字符串
QUEUED
127.0.0.1:6379(TX)> INCR k1			//使k1自增,语法正确,但字符串无法加一,出现运行时异常
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
127.0.0.1:6379(TX)>  get k3
QUEUED
127.0.0.1:6379(TX)> EXEC			//所有命令都能执行
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
4) OK
5) "v3"

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:09:28  更:2021-09-27 14:12:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:39:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码