redis将散裂中某个值自增_Redis数据类型专项讲解

本文详细介绍了Redis的五种数据类型:字符串、哈希、列表、集合和有序集合。对于每种类型,都讲解了其适用场景、常用操作及实例,如字符串的自增、哈希的存储对象、列表的添加和删除、集合的唯一性以及有序集合的排序功能。
摘要由CSDN通过智能技术生成

Redis通用命令通用命令

key过期时间相关命令,以下三个状态只有在对key使用过expire命令后才有效:1代表key未过期,-2代表key过期且已经被删除,-1代表key存在,但没有设置过期时间

Redis配置文件常用配置项配置文件常用项

Redis自带客户端的基本命令操作

./redis-cli -h 连接地址 -p 连接端口 -a 密码

如果连接的就是本机且端口就是默认的6379,则前两个连接参数可省略不写

select 数据库编号

切换数据库

info [cluster|memery|server|cpu|replication...]

查看redis系统参数

flushall

清除所有数据库中存储的数据

flushdb

清除当前数据库中存储的数据

Redis的java客户端Jedis以java的jedis为例连接redis

Jedis在是线上是直接连接redis server的,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接(官方推荐)Lettuce连接池

基于netty,连接实例可以在多个线程间并发访问,因为是线程安全的,所以一个连接实例就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够时也可以按需增加连接实例

在spring-boot data redis 1.x之前默认使用的是Jedis,但目前最新版已经改成了Lettuce

之前公司使用Jedis居多,lettuce近两年在逐步上升,总的来讲Jedis性能会优于Lettuce(因为它直接操作redis)testOnBorrow和testOnReturn建议在生产环境下设未false

连接池配置参数示例

从配置好的连接池里获取jedis连接对象

Spring-Boot集成Redis

1.配置Redisapplication.yml中的配置

2.添加Redis序列化方法(参考)

springboot2+redis +Jackson实现缓存序列化:

https://www.jianshu.com/p/e26a740c65b8

https://gitee.com/renrenio/renren-fast/blob/master/src/main/java/io/renren/config/Redisconfig.java

Redis的五种基本数据类型

1.string 字符串

2.hash 散列

3.list 列表

4.set 集合

5.sorted set 有序集合

字符串-strings

redis的最基本数据类型。不仅可以存储字符串,还可以存储整数或者浮点数,所存储的value容量上限为512M。

适用场景:分布式锁,计数器

字符串API

设置字符串

set key value 不管key是否存在都能设置值

同时设置多个字符串

mset key1 value1 key2 value2 ...keyN valueN

同时获取多个字符串

mget key1 key2 value2 ...keyN

key存在则设置失败,不存在则设置成功

setnx key value 相当于添加操作

实例:setnx

key存在则设置成功,不存在则设置失败

set key value xx 相当于update操作

实例:更新成功返回ok,失败返回nil

设置新的值后把旧的值返回

getset key newValue

实例:getset

将value追加到旧的value后

append key value

实例:因为演示时系统采用的是utf-8编码,所以1个中文占3个字节,所以append后返回的长度为17

获取字符串长度

strlen key (注意中文)

实例:strlen

获取字符串

get key

删除字符串

del key

自增1,如果key不存在,则自增后get(key)=1

incr key

实例:

自减1,如果key不存在,则自增后get(key)=-1

decr key

实例:decr

自增k,如果key不存在,则自增后get(key)=k

incrby key k

实例:返回自增后的值

自减k,如果key不存在,则自增后get(key)=-k

decrby key k

实例:返回自减后的值

自增一个浮点数key,如果key不存在,则自增后get(key)=key

incrbyfloat key value 注意,并没有decrbyfloat命令

实例:incrbyfloat

在指定下标位置设置一个新值

setrange key index value

实例:如果设置的是中文字符索引,则索引位必须是中文字符的第一个字节的索引位,否则设置后就会产生乱码

获取指定下标对应的值

getrange key start end

实例:可以看到,如果有中文,需要知道一个中文占几个字符再获取,否则会产生乱码

哈希-hash

hash是一个 string 类型的 field(字段)和 value(值)的映射表,特别适合用于存储对象。

每个 hash 可以存储 232 - 1 键值对(40多亿)。

适用场景:缓存视频或者用户信息,网页访问计数

哈希API

设置hash中的键值对

hset key field value

实例:成功返回1,失败返回0

设置多组hash中的键值对

hmset key field1 value1 field2 value2...fieldN valueN

实例:hmset

获取hash中的属性对应的值

hmget key field1 field2...fieldN

实例:hmget

获取hash中的属性对应的值

hget key field

实例:hget

获取hash中的所有键值对

hgetall key (谨慎使用)

实例:hgetall

删除hash中的属性对应的值

hdel key field

实例:成功返回1,失败返回0

判断hash是否拥有该属性

hexists key field

实例:属性存在返回1,不存在返回0

获取hash拥有的属性个数

hlen key

为hash里对应的属性增加固定的整数值

hincrby key field intCount

实例:返回基数后的属性值

为hash里对应的属性增加固定的整数值

hincrbyfloat key field floatCount

实例:键不存在则新建一个键进行累加,返回累加后的值

获取hash中所有的键

hkeys key

获取hash中所有的值

hvals key

设置hash中对应属性的值(如果field已经存在则设置失败)

hsetnx key field value

实例:成功返回1,不成功返回0

列表-list

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

适用场景:TimeLine

列表API-增加操作

向列表左边或者右边添加一个或多个元素

lpush key value1 value2 ...valueN

rpush key value1 value2 ...valueN

实例:lpush

rpush

在列表的指定元素得前或后插入新元素

linsert key before value newValue

linsert key after value newValue

实例:linsert before

linsert after

列表API-删除操作

删除列表左边的元素

lpop key

实例:剔除列表最左端的元素并返回

删除列表右边的元素

rpop key

实例:删除列表最右端的元素并返回剔除列表最右端的元素并返回

blpop key timeout 阻塞一段时间,在此期间内有元素加入则立刻弹出,timeout为0则表示永远不阻塞

实例:有元素则弹出并返回,没有则返回nil

brpop key timeout 阻塞一段时间,在此期间内有元素加入则立刻弹出,timeout为0则表示永远不阻塞

实例:有元素则弹出并返回,没有则返回nil

根据count的值,从列表中删除所有和给定value相等的元素

lrem key count value

1) count > 0,从左到右删除最多count个和value相等的元素

2) count < 0 从右到左删除最多Math.abs(count)个和value相等的元素

3) count = 0 删除所有和value相等的元素

实例:返回删除的元素个数

保留指定范围内的列表元素

ltrim key start end

实例:ltrim

列表API-查询操作

获取指定范围内的所有元素

lrange key start end (包含end)

实例:

lrange

获取指定索引的元素

lindex key index

实例:获取成功则返回要获取的元素,获取不到返回nil

获取列表中元素总个数

llen key

实例:llen

修改指定索引的value

lset key index newValue

实例:如果修改索引超过了列表范围则会抛出异常

技巧lpush+lpop = stack 实现栈

lpush+rpop = queue 实现队列

lpush+ltrim = capped collection 实现固定容量的列表

lpush+brpop 消息队列集合-set

集合-set

集合是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

适用场景:各类抽奖系统,社交点赞点踩系统,为用户添加兴趣标签。

集合API-基本操作

添加一个集合

sadd key element [...element]

实例:

添加成功返回添加的元素个数,失败则返回0

删除集合中指定的元素

srem key element [...element]返回值为执行本次命令所删除的元素个数,支持删除多个元素

获取集合中元素总个数

scard key

实例:key存在则返回集合中的元素个数,key不存在则返回0

判断某一个key是否存在于给定集合中

sismember key element

实例:

存在则返回1,不存在则返回0

从集合中随机挑选出指定个数的元素

srandmember key count

不指定返回个数则默认返回1个

从集合中随机剔除一个元素

spop key

实例:spop

获取集合中所有元素,返回的结果无序,集合内数据多时谨慎使用此命令

smembers key

实例:smemberssmembers

迭代集合中键的元素

sscan key cursor [match pattern] [count count]

cursor - 游标。

pattern - 匹配的模式。

count - 指定从数据集里返回多少元素,默认值为 10

实例:每次执行便理都会返回一个游标值,在下次执行命令时使用返回的游标值,如果游标值不为0则需要继续使用返回的游标值再次执行sscan命令,直至返回的游标值为0才算遍历完毕

集合API-范围操作

获取集合间的差集

sdiff key1 key2 获取的使key1代表的集合里不存在于key2代表的集合里的元素

实例:

以传入的第一个key作为标准获取差集

获取集合间的交集

sinter key1 key2 获取的使key1代表的集合里不存在于key2代表的集合里的元素

实例:

以传入的第一个key作为标准获取交集

获取集合间的交集

sunion key1 key2 key3

实例:

sunion

将给定集合之间的差集,并集或者交集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖

sdiffstore newkey key1 key2

实例:返回保存到新store的元素个数

sinterstore newkey key1 key2

实例:返回保存到新store的元素个数

sunionstore newkey key1 key2

实例:返回保存到新store的元素个数

有序集合-zset

有序集合的结构依然也是以key-value的形式存储,但是它的value却是由两部分组成,一部分为score,一部分为value。score也就是一个分值的概念,从而以此分值来组成一个有序集合。

适用场景:各类排行榜,通过将时间戳,销售数量,关注数作为key的score来进行排序。

有序集合API-基本操作

添加一个有序集合

zadd key score element(可以是多对) score可以重复,但element不可以重复,拿具体例子来说,一个班级里的学生学号不可以重复,但考试成绩却可以重复。

实例:

成功返回新增的元素个数,失败返回0

删除元素

zrem key element(可以是多个)

实例:

zrem(删除成功返回1,删除失败返回0)

返回元素的分数

zscore key element

实例:

zscore

增加或减少元素的分数

zincrby key increscore element

增加或减少元素的分数

实例:

如果key不存在,增加分值相当于新增一个key到集合中

返回元素总个数

zcard key

返回元素总个数

实例:

zcard

获取一个键在一个有序集合里的排名(默认按从小到大的顺序排名)

zrank key element (想要使排序顺序从高到低则用zrevrank)

返回元素在集合中的排名

实例:

zrank(是以0开始排名)

有序集合API-范围操作

获取指定区间内的成员,其中成员的位置按分数值递增(从小到大)来排序,具有相同分数值的成员按字典序(lexicographical order)来排列。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

zrange key start stop [withscores] (想要使排序顺序从高到低则用zrevrange)

实例:zrange,withscores参数为可选项,表示是否将元素对应的分值一并获取

返回指定分数范围内的升序元素

zrangebyscore key minscore maxscore [withscores](想要使排序顺序从高到低则用zrevrangebyscore)

实例:

zrangebyscore

返回指定分数范围内的元素个数

zcount key minscore maxscore

实例:

zcount

根据排名范围删除元素

zremrangebyrank key start end

实例:

成功返回删除的元素个数,失败返回0

根据分数范围删除元素

zremrangebyscore key minscore maxscore

实例:成功返回删除的元素个数,失败返回0

集合         VS有序集合           VS           列表

重复元素               X                               X                                   O

有序                      X                              O                                   O

存储结构          element               element+score                   element

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值