栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 数据类型
    • 五大数据类型
      • String
      • List
      • Set
      • Hash
      • Zset
    • 三种特殊数据类型
      • geospatial
      • hyperloglog
      • bitmaps
  • 事务

学习途径

官网:Redis

中文网:redis中文官方网站

b站:狂神说

数据类型 五大数据类型

官网

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-

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"

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号