Redis数据类型

一、Redis概述

在传统的java Web项目中,使用数据库存储数据。由于数据库持久化数据是面向磁盘的,而磁盘读写较慢,在存在大量并发访问的时候,比如抢购、秒杀场景,数据库难以承受极短时间内的成千上万次读写操作,极易造成系统瘫痪,最终导致服务器宕机。
为了解决这类问题,java Web项目旺旺引入NoSQL技术。NoSQL是一种简易的基于内存的数据库,并提供一定的持久化功能。Redis和MongoDB是当前使用最广泛的NoSQL技术。
Redis可以支持每秒十几万次的读写操作,性能远远超过数据库,并且支持集群、分布式、主从同步等配置,还支持一定的事务功能。

1、Redis性能优越的原因:

  • Redis基于ANSI C语言编写,接近于汇编语言的机器语言,运行十分快速。
  • Redis基于内存读写
  • Redis数据结构只有5种基本类型,数据结构比较简单。

2、是否使用Redis存储应当考虑的因素:

  • 业务数据是否常用。命中率如何。如狗命中率不高,没用必要写入缓存
  • 该业务数据是读操作多还是写操作多。如果写操作读,需要频繁写入数据库,没必要使用缓存
  • 业务数据大小如何。如果数据过大会给缓存带来压力。

2、Redis五大常用数据类型

Redis是一种基于内存的键值(key-value)数据库,使用key作为索引找到当前缓存的数据返回,Redis支持5种数据类型:STRING(字符串)、HASH(哈希散列表)、LIST(列表)、SET(集合)、ZSET(有序集合)。

(1)、STRING(字符串类型)

字符串是Redis最基本的数据结构,犹如java的map,以一个键一个值存储数据。
字符串类型基本命令:

命令说明备注
set key value设置键值对最常用的写入命令
get key通过键获取值最常用的读取命令
del key通过key,删除键值对删除命令,返回删除数,其他数据结构也可以使用
strlen key求key指向字符串的长度返回长度
getset key value修改原来key的值,并将旧值返回如果原来值为空,则返回空,并设置新值
getrange key start end获取子串start和end的取值范围为0 - len-1
append key value将value加入到原来key的字符串末返回key指向新字符串的长度
(2)、HASH(哈希类型)

哈希类型结构也也如java的map,其value值是一个string类型的field和value的映射表,哈希类型特别适合用来存储对象。
hash结构基本命令:

命令说明备注
hdel key field [field2 …]删除哈希结构中的某个或某些字段可以进行多个字段的删除
hexists key field判断hash结构中是否存在field字段存在返回1,不存在返回0
hgetall key获取该key对应的所有字段和值返回键和值
hincrby key field increment指定给hash结构中的某一个字段加上一个整数要求该字段也是整数字符串
hkeys key返回hash中所有的键
hlen key返回hash中键值对数量
hmget key field [ field2 … ]返回hash中指定的键的值,可以是多个一次返回值
hmset key field1 value1 [ field2 value2 …]hash结构设置多个键值对
hset key field valuehash结构设置多个键值对单个设值
hsetnx key field value当hash结构中不存在对应的键时,才设值
hvals key获取hash结构中所有的值
(3)、LIST(链表类型)

双向链表结构,有序可重复,插入和删除便利,查询性能不佳。
链表的基本命令:

命令说明备注
lpush key node1 [ node2 … ]在链表最左端插入node1如果是插入多个,插入后从左到右的顺序是noden … node2 node1
rpush key node1 [ node2 … ]在链表最右端插入node1如果是插入多个,插入后从左到右的顺序是node1 node2 … noden
index key index读取下标为index的节点返回节点字符串,从0开始算
llen key求链表的长度返回链表节点数
lpop key删除链表最左端的节点,并将其返回
rpop key删除链表最右端的节点,并将其返回
linsert key before|after pivot node在值为pivot的节点前面或后面插入一个职位node的节点如果list不存在,则报错;如果没有值为pivot的节点,则插入失败,返回-1
lpushx list node如果存在key为list的链表,则在链表最左端插入node如果list不存在,则失败
rpushx list node如果存在key为list的链表,则在链表最右端插入node如果list不存在,则失败
lrange list start end获取链表list从start下标到end下标的节点值包含start 和end下标 的值
lset key index node设置列表下标为index的节点的值为node
ltrim key start stop修剪链表,只保留从start到stop的区间的节点,其余都删掉包含start 和 end下标的节点会保留

链表的阻塞命令:

命令说明备注
blpop key timeout移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待时间超时或发现可弹出元素为止相对于lpop命令,它的操作是进程安全的
brpop key timeout移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待时间超时或发现可弹出元素为止相对于rpop命令,它的操作是进程安全的
rpoplpush key src dest按从左到右的顺序,将一个链表的最后一个元素移除,并插入到链表的最左边不能设置超时时间
brpoplpush key src dest timeout按从左到右的顺序,将一个链表的最后一个元素移除,并插入到链表的最左边,并可以设置超时时间可设置超时时间
(4)、SET(集合类型)

Redis的集合类型不是一个线性结构,而是哈希表结构。对于redis集合的插入、删除和查找的复杂度都欧式O(1),注意集合元素无序不可重复,每一个元素都是String类型。
集合的基本命令:

命令说明备注
sadd key member1 [ member2 … ]给键为key的集合增加成员可以同时增加多个
srem key member1 [ member2 … ]移除集合中的元素可以是多个
scard key统计键为key的集合的成员数
sdiff key1 [ key2 ]找到两个集合的差集参数如果是单key,则返回这个key的所有元素
sdiffstore des key1 [ key2 ]找到两个集合的差集,并保存到des集合中
sinter key1 [ key2 ]求key1和key2的交集参数如果是单key,则返回这个key的所有元素
sinterstore des key1 key2找到两个集合的交集,并保存到des集合中
sunion key1 [ key2 ]求两个集合的并集参数如果是单key,则返回这个key的所有元素
sunionstore des key1 key2找到两个集合的并集,并保存到des集合中
sismember key member判断member是否是键为key的集合的成员是返回1,否返回 0
smembers key返回键为key的集合的所有成员
smove src des member将member元素从结合src转移到des中
spop key随机弹出集合的一个元素
srandmember key [ count ]随机返回集合中的count个元素count不填默认为1,如果count为负数则先求其绝对值,如果count大于集合总数,则返回整个集合
(5)、ZSET(有序集合类型)

有序集合与集合类似,主要区别是有序集合每一个元素除了值之外,还多了一个分数。分数是一个浮点数。有序集合元素不可重复,但分数可以一样。
有序集合基本命令:

命令说明备注
zadd key score1 value1 [ score2 value2 … ]给键为key的有序集合增加成员如果不存在对应的key,则创建键为key的有序集合
zscore key member返回成员的分数值
srem key member1 [ member2 … ]移除集合中的元素可以是多个
zcard key统计键为key的有序集合的成员数
zcount key min max返回分数大于或等于min,小于或等于max的成员的值列表若需要不包含min或max,在其前面加“(”
zrank key member求有序集合中按从小到大顺序,member成员的排行排名第一为0,排名第二为1…
zrevrank key member求有序集合中按从大到小顺序,member成员的排行排名第一为0,排名第二为1…

其他求交集、差集、并集的命令可类比无序集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值