详解以及Spring Boot整合Redis

Redis支持的数据类型:

多数据类型支持

字符串类型           string

列表类型               list

散列类型               hash

集合类型               set

有序集合类型         sorted_set

String:

存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型

存储数据的格式:一个存储空间保存一个数据

存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

==========================字符串类型 string==========================

添加/修改数据 set key value

获取数据   get key

删除数据   del key

添加/修改多个数据     mset key1 value1 key2 value2 …(m代表Multiple)

获取多个数据 mget key1 key2 …

获取数据字符个数(字符串长度) strlen key

追加信息到原始信息后部(如果原始信息存在就追加,否则新建) append key value

设置数值数据增加指定范围的值

incr key

incrby key increment

incrbyfloat key increment 设置数值数据减少指定范围的值

decr key

decrby key increment

设置数据具有指定的生命周期

setex key seconds value

psetex key milliseconds value

设置key的过期时间

EXPIRE key seconds

查看key的剩余时间  ttl key

hash:

存储的困惑 对象类数据的存储如果具有较频繁的更新需求操作会显得笨重

hash哈希特点

新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息

需要的存储结构:一个存储空间保存多个键值对数据

hash类型:底层使用哈希表结构实现数据存储 hash存储结构优化 如果field数量较少,存储结构优化为类数组结构 如果field数量较多,存储结构使用HashMap结构

==========================hash哈希类型==========================


添加/修改数据
hset key field value
获取数据
hget key field
hgetall key
删除数据
hdel key field1 [field2]
获取哈希表中字段的数量
hlen key
获取哈希表中所有的字段名或字段值
hkeys key
hvals key

hash 类型数据操作的注意事项
1.hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取  
到,对应的值为(nil)
2.每个 hash 可以存储 2^32^-1个键值对
3.hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了   
存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
4.hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈

List:

==========================list==========================


添加/修改数据
lpush key value1 [value2] ……
 rpush key value1 [value2] ……
获取数据
lrange key start stop
 lindex key index
 llen key
获取并移除数据
lpop key
 rpop key
通过下标截取指定的长度,这个list已经被改变了,只剩下截取的元素
ltrim key start end 
lset将列表中指定下标的值替换为另外一个值,更新操作
lset key 下标 新数据 # 如果不存在列表我们去更新就会报错

list 类型数据操作注意事项
1.list中保存的数据都是string类型的,数据总容量是有限的,最多2^32^-1个元素 (4294967295) 
2.list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出 栈操作
3.获取全部数据操作结束索引设置为-1 
4.list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载

Set:

添加数据
sadd key member1 [member2]
获取全部数据
smembers key
删除数据
srem key member1 [member2]
获取集合数据总量
scard key
判断集合中是否包含指定数据
sismember key member
业务场景一:==========================================================
每位用户首次使用今日头条时会设置3项爱好的内容,但是后期为了增加用户的活跃度、兴趣点,必须让用户
对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?
业务分析
1.系统分析出各个分类的最新或最热点信息条目并组织成set集合
2.随机挑选其中部分信息
3.配合用户关注信息分类中的热点信息组织成展示的全信息集合
解决方案
随机获取集合中指定数量的数据
srandmember key [count]
随机获取集合中的某个数据并将该数据移出集合
spop key [count]
 Tips 1:
 redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐,
大V推荐等
业务场景二:==========================================================
 1.脉脉为了促进用户间的交流,保障业务成单率的提升,需要让每位用户拥有大量的好友,事实上职场新人不
具有更多的职场好友,如何快速为用户积累更多的好友?
2.新浪微博为了增加用户热度,提高用户留存性,需要微博用户在关注更多的人,以此获得更多的信息或热门
话题,如何提高用户关注他人的总量?
3.QQ新用户入网年龄越来越低,这些用户的朋友圈交际圈非常小,往往集中在一所学校甚至一个班级中,如何
帮助用户快速积累好友用户带来更多的活跃度?
4.美团外卖为了提升成单量,必须帮助用户挖掘美食需求,如何推荐给用户最适合自己的美食?
解决方案
求两个集合的交、并、差集
sinter key1 [key2] 
sunion key1 [key2] 
sdiff  key1 [key2]
求两个集合的交、并、差集并存储到指定集合中
sinterstore destination key1 [key2] 
sunionstore destination key1 [key2] 
sdiffstore destination key1 [key2]
将指定数据从原始集合中移动到目标集合中
smove source destination member
set 类型数据操作的注意事项
1.set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
2.set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

sorted_set:

新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式 需要的存储结构:新的存储模型,可以保存可排序的数据

sorted_set类型:在set的存储结构基础上添加可排序字段

==========================sorted_set==========================
添加数据
zadd key score1 member1 [score2 member2]
获取全部数据
zrange key start(开始索引) stop(结束索引) [WITHSCORES]   #[WITHSCORES]可以除了数据还
显示分值
zrevrange key start stop [WITHSCORES]   反转
删除数据
zrem key member [member ...]
获取集合数据总量
zcard key

整合Redis:Spring-data-redis

1.加入Redis相关依赖尺寸

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency> 

 2.具体代码了解

spring data redis中封装了两个模板类,帮助我们实现redis的crud
 RedisTemplate         
key value泛型都是object
 StringRedisTemplate       
注意:
 key value泛型都是string
 1.两者数据各自存,各自取,数据不互通。
RedisTemplate不能取StringRedisTemplate存入的数据
StringRedisTemplate不能取RedisTemplate存入的数据
2.序列化策略不同:
 RedisTemplate采用JDK的序列化策略(JdkSerializationRedisSerializer)保存的key
和value        
都是采用此策略序列化保存的
存储时,先将数据序列化为字节数组,再存入Redis数据库。查看Redis会发现,是字节数组的形
式类似乱         
Serializable接        
码读取时,会将数据当做字节数组转化为我们需要的数据,以用来存储对象,但是要实现
口
StringRedisTemplate采用String的序列化策略(StringRedisSerializer)保存的key和
value都        
3.两者的关系是StringRedisTemplate继承RedisTemplate
出一个对是采用此策略序列化保存的当存入对象时,会报错:can not cast into String
存储和读取,都为可读的数据
4.使用场景:
当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那
么你就使         
用StringRedisTemplate即可。
但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取
象,那么使用RedisTemplate是更好的选择。

五大数据类型

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForList();//操作List
 redisTemplate.opsForSet();//操作Set    
redisTemplate.opsForZSet();//操作ZSet
 redisTemplate.opsForHash();//操作Hash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值