当前位置: 首页 > news >正文

redis中的数据类型

String数据类型

String的基本命令:

1.set和get:

NX表示如果key不存在才设置,存在就不设置.

XX表示key存在才设置,不存在就不设置.

EX表示设置的过期时间,时间单位是秒;PX表示的是时间单位是毫秒.

2.mset和mget:

可以批量的设置和获取key.

3.setnx,setex,psetex:

分别是set nex,set ex,set px的缩写,功能一致.

4.incr,incrby:

分别表示整数value的自增和增值固定值,但只能针对整数,同时增加固定值也是只能增加整数.

5.decr,decrby,incrfloat:

分别是自减一和减去固定整数,增加小数.

6.append

在字符串的最后加上要拼接的字符串.

7.getrange和setrange

getrange是获取字符串的全部或部分,key后面的start和end表示就是范围(左闭右闭),可以使用负数,例如-1表示最后一个字符.

setrange表示改变字符串中的部分或全部字符.

8.setlen:

获取字符串的长度,统计的是字节(一个汉字三个字节).

String的一些应用场景

1)作为缓存,协助MySQL进行工作,由于redis具有良好的处理高并发的特性,可以很好降低MySQL面对大量请求宕机的缺点.

2)计数功能,当一个视频有一个点赞时就可以进行统计.

3)对session进行集中管理,面对负载均衡的情况,不同主机之间可以连接同一个redis服务器,使用一个redis服务器来进行管理session.

Hash数据类型

redis中存储数据的方式是通过"键值对"这样的哈希表的方式存储,而Hash数据类型表示的是value的值是hash,这就是在哈希表的里面套了一层哈希表,这样的结构外层使用的是key-value,里层表示的是field-value.

Hash的基本命令:

1)hget和hset:

hset可以设置一个value为哈希,hget则通过key和field来取到value.

2)hexists和hdel:

hexists可以根据key和查找field是否存在;hdel根据key删除field.

3)hkeys和hvals:

hkeys表示可以获得所有的field,hvals表示可以获得所有的value.但是这里的两个操作都不安全,如果哈希表中的数据过多,可能导致redis处理速度变慢.

4)hgetall和hmget:

hgetall表示获取所有的field和value,hmget表示可以获取多个field的value.

5)hlen,hincr,hincrfloat:

分别是获取field的个数,针对整数和小数的加减.

6)hstrlen:

获取value值的字符串长度

List数据类型

list类型其实就类似于数组或顺序表,可以进行头插和头删,也可以进行尾插和尾删.

list的基本命令

1)lpush,rpush和lrange:

分别是头插和尾插,根据范围获取元数.

2)lpop和rpop:

头删和尾删.

3)lpushx,rpushx:

lpushx表示的是头插,但是key存在就插入,不存在就不会插入;rpushx表示尾插,存在就插.

4)lindex和llen:

lindex表示根据下标获取值;llen获取list中的元素个数.

5)linsert:

linsert根据基准值(list中的值)的插入基准值的前和后;

6)lrem:

lrem后面要跟要删除元数的个数和value,从前面开始遍历,删除指定的个数,当个数为正数就从前开始;为负数就从后开始遍历;为0就删除所有等于的value值.

7)ltrim,lset:

ltrim表示除了删除除了指定的[left,right]外所有的元素;lset表示在指定下标插入值.

8)blpop,brpop:

这里指的是带有阻塞效果的头删和尾删,这里的阻塞只针对list为空时,当list中有元素时,此时blpop和lpop没有区别,但是当list为空时,此时将lpop会直接返回nil,而blpop则会等待一定时间再返回nil,在这等待时间的过程中如果有元素插入,此时blpop就会将元素直接返回.

当有多个key同时blpop时,此时如果list不为空,就会返回最左边list的值;如果都为空就会进行等待,等到哪个list中有值了就返回.

List的一些应用场景

1)可以作为消息队列,通过blpophebrpop就可以实现一个经典的生产者消费者模型.

2)分频道的消息队列,可以有多个消费者同时监视同一个list,也可以一个消费者同时监视多个list.

Set数据类型

Set通俗讲就是集合,集合中的元素是无序的,这里的无序表示的是顺序并不会影响集合的结果,集合中的元素是不能重复.

除了基本的对单个集合的操作,还有进行对多个集合的取交集(inter),并集(union),差集(diff).

set的基本命令

1)sadd,smembers,sismember:

sadd往集合中添加元素,当有重复元素是就会进行去重,最后只能有一个.

smembers是查询所有的元素.

sismember表示要查询member在不在集合中.

2)spop,srandmember:

spop表示随机删除一个元素.

srandmember表示随机取出一个元素.,但是不删除.

3)scard:

计算出集合中所有的元素个数.

4)sinter,sunion,sdiff:

分别是计算交集,补集,差集;加上store就是将求出的集合重新装到新的集合中.

Set的一些引用场景

set比较适合的是标签,例如体育,游戏等题材,可以将其抽象成标签,提供给用户选择,方便推荐相应题材.

Zset数据类型

Zset表示的是"有序"的集合,插入元素要以score member的形式进行,zset中的有序其实就是按照对比score进行排序.

1)zadd:

添加一个或多个集合元素,以分数 元素的形式来进行插入,返回的是添加的元素个数.

CH:不仅返回添加元素的个数,也返回了更新元素的个数.

incr:类似incrby的效果,将score增加指定值.

2)zcard,zcount:

zcard表示统计一共几个元素.

zcount表示在指定区间内(使用score)的所有元素个数,默认是两边都是闭区间,但是可以排除边界值.

3)zrange,zrevrange:

zrange获取指定区间中的所有元素.

zrevarge表示将指定区间内所有元素逆转(降序排序).

两者带上withscore都可以将元素和分数都返回.

4)zpopmax/zpopmin:

删除集合score中最大/最小的值.

5)bzpopmax:

zpopmax的阻塞版本.

6)zrank/zrevrank:

升序/降序返回元素的排名.

7)zscore:

返回指定member的分数.

8)zrem:

指定的member进行删除.

9)zremrangebyrank/zremrangebyscore:

按照排序/分数删除指定区间内的元素(左闭右闭).

10)zincyby:

将分数增加指定值.

11)zinterstore,zunionstore:

交集,并集.

Zset的一些应用场景

1)一般可以用于游戏的天梯系统,当这些排名有变化时,就根据相应的分数进行修改.

2)删除排行榜上的人就可以使用zset中的命令.

scan渐进式遍历

为了防止keys*这样的操作导致redis阻塞,我们可以使用渐进式遍历(这里的scan表示遍历string,其他类型也有其他命令).

基本语法:scan a count b

a首次要从0开始,往后的遍历a填的是返回的'a'.

b表示要返回的key的个数

这里的返回的key的个数不一定会按照指定的个数返回(返回1不一定返回一个key).

在Java和Spring中使用redis客户端

在idea中使用redis客户端,首先要引入依赖:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.5</version></dependency>

使用jedispool这个类,初始化这个redis连接池.

这里要注意的是redis服务器在云服务器上,需要开设redis的端口,我们远程的主机才能连接到redis的服务器,但是开放这个端口会导致redis服务器不安全,这会导致服务器被攻击,所以可以采取ssh远程端口映射,将redis在服务器上的端口映射到我们本地,这样使用本地的IP端口就可以进行访问了.

从连接池中取出一个连接jedis,jedis就表示当前的一个redis连接,我们可以对这个对象进行操作.

这里的方法都是和在Linux上操作的命令相似,可以举一反三.

在Spring中使用redis客户端,同样要引入依赖,在创建spring的项目时需要勾选上操作redis的选项

创建好项目后就需要设置配置文件:

spring:data:redis:host: 127.0.0.1port: 8888

同时检查ssh端口映射是否开启:

准备工作就已完成,接下来就是进行编写代码:

在spring中需要使用 StringRedisTemplate 这个类来进行操作redis,这个类对jedis中的操作又进行了一次封装.

上面使用的就是插入字符串类型.

除了封装以外,redisTemplate还有可以通过回调函数调用封装前的方法

http://www.dtcms.com/a/532853.html

相关文章:

  • 2025年10月25日(星期六)骑行哈马者游记
  • 数据结构 —— 堆
  • 基于阿里云SDK的DDNS系统:架构设计与性能优化实战
  • 有哪些做调查问卷赚钱的网站自行创建网站的平台
  • 丰南建设网站wordpress网站前台打开慢
  • C4D域力场的修改层及遮罩详解
  • SAP SD交货单过账冲销接口分享
  • 如何在 Java 程序中检查是否可以连接到某个网站
  • 做网站市场报价步登顶wordpress小程序百家号
  • C语言复习笔记(一)
  • (10)shell 编程入门
  • 深入剖析C++文件操作的底层机制
  • 高端网站价格网架球加工厂家
  • 响应式网站文章网站建设字体变色代码
  • python+vue图书在线阅读推荐平台设计(源码+文档+调试+基础修改+答疑)
  • git仓库基本使用
  • 网站维护需要多久时间上海做网站建设公司排名
  • 在婚恋网站上做红娘怎么样什么都可以看的浏览器
  • 做平台网站要什么条件重庆网站建设重庆网站设计
  • 江苏系统建站怎么用咖啡网页设计素材
  • 网站建设软件免费使用密码访问wordpress文章
  • 物联网设备通信协议参数的能耗自适应调整机制
  • PySide6 win10 记事本从零到一——前言
  • win7 iis网站无法显示石家庄尚武科技
  • 建设网站哪家公司好网站建设公司招聘
  • UFS Reset 介绍
  • ESP8266无线开关
  • 生鲜电商网站建设一共有多少网站
  • 泰州网站建设案例海淘网站主要关键词
  • 网站 第三方登录做公众号用什么网站吗