Redis基础学习

前言

在一个项目当中,单靠一个关系型数据库如Mysql,难免会让系统比较吃力;一些需要频繁写入修改的操作,让mysql做会大大影响效率。如果我们使用redis之类的NoSql,就可以帮助我们提升效率,例如大部分商城的购物车就是用redis来实现的。 NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。以下是总结redis五种基本数据类型的操作和应用场景。

一、string

redis存储是典型的key-value存储方式
基本操作

set key value
get key
del key

高级操作

mset key1 value1 key2 value2...
mget key1 key2

其他命令

incr key // +1                          
decr key // -1
incrby key increment // +increment
decrby key increment // -increment

redis有个巨大特点是设置超时实际,过期自动删除

设置超时时间
setex key seconds value
setex name 60 jack //给key为name的数据设置60秒超时时间
ttl key //查看剩余超时时间
peisist key //切换key从时效性为永久性

应用场景

1. 以用户主键和属性值作为key
key: 表名:主键名:主键值:字段名
set user:id:001:name jack
set user:id:001:age  20
2.
set user: id:12345 {id:125,fans:123,blogs:2333,focus:666}

二、hash

在这里插入图片描述

基本命令

hset key field value
hget key gield
hget all key
hdel key filed
del key

高级命令

hmet key f1 v1 f2 v2...
hmget key f1 f2..
hlen key
hexists key filed

应用场景

(1)电商购物车:添加购物车、浏览购物车商品、更改购物车商品数量、删除商品、清空商品均可实现。
key : userID
field : 商品ID
value : 商品购买数量
示例:
hmset userId:1001 goodId 100011 goodName iphone number 2

优化:
将商品详情提取出来做一个独立的hash
购物车只存id和数量

(2) 商家限量抢购
每卖一个就 hincrby key field -1

我的理解是,在添加购物车的时候,对redis进行两次存储,一次是在公共hash内存储商品json(存在key则不再进行存储),还有一次就是对用户hash进行存储商品id和商品数量;查询的时候将商品id查出来再到公共商品hash内进行查询出商品的具体参数。
在这里插入图片描述

这张图片很好解释redis中hash运用于购物车的操作

三. list

  • 数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行分区
  • 需要的存储结构:一个存储空间保存索格数据,且通过数据可以体现进入顺序
  • list类型:保存多个数据,底层使用双向链表存储结构实现
    在这里插入图片描述

基本操作


//添加数据
lpush key value1 value2...  
rpush key value1 value2...
//获取数据
lrange key start stop
lindex key index
llen key
//获取并移除数据
lpop key 
rpop key
//移除制定数据
lrem key count value

应用场景:消息队列,最新消息展示

  1. 朋友圈点赞,按顺序显示点赞的朋友
  2. list存储数据,一般使用lpush从左边开始存,过程有点像压栈弹栈,因此是后进先出。
  3. 可以对数据进行分页,将第一页数据放在redis中,加速访问

四. set

  • 存储大量数据、查询速度快
  • 能够保存大量的数据,高效的内部存储机制,便于查询。
  • 与hash存储结构完全相同,但只存键,不存值
    在这里插入图片描述

基本操作

sadd key value1 value2 //添加数据
smembers key //获取全部数据
scard key //获取数据总量
sismember key value //判断value是否是key集合内的数据
srem key value //删除数据

高级操作

可求交、并、补
sinter set1 set2 ... 	//求多个集合的交集:
sunion set1 set2 ...  				//求多个集合的并集:
sdiff set1 set2 ...   				//求多个集合的差集:
sinterstore des set1 set2 ...		//求多个集合的交集,并且把交集存入集合des中
sunionstore des set1 set2 ...		//求多个集合的并集,并且把交集存入集合des中
sdiffstore des set1 set2 ...		//求多个集合的差集,并且把交集存入集合des中

应用场景

  • 因为set中值是不允许重复,可利用去重特征记录各种访问数据
sadd ips 1.2.3.4
sadd ips 2.3.4.5
sadd ips 2.3.4.5
scard ips // 2

注意事项

  • redis注重的是存储数据,sismebers之类判断逻辑操作的,不推荐在redis中使用,影响效率

五. sorted_set

  • 因为set类型类似hash但没有value(为nil),只有key。无法对数据进行排序,因此引入sorted_set,在set的存储结构基础上添加可排序字段,将value变为score,可添加int类型进行排序
    在这里插入图片描述

基本操作

zadd key socre1 value1 score2 value2...
zrange key 0 -1   //取出全部value值
zrange key 0 -1 withscores //取出全部value+score值
zrevrange key 0 -1 [withscores] //降序显示,大的score在上
zcard key //获取数据总量
zrem key value //删除数据

应用场景

根据商品销量对商品进行排行显示
定义商品销售排行榜(sorted_set集合),value为商品id,score为商品销量
zadd items:sellsort 9 1001 10 1002 //id为1001的商品销量是9,id为1002的商品销量为10
zincrby intems:sellsort 1 1001 //id为1001的商品销量+1
zrange items:sellsort 0 9 withscores //获取商品销量前10名

六. key通用操作

key基本操作
del key		//删除指定key
exists key	//获取key是否存在
type key	//获取key的类型
key扩展操作
//为指定的key设置有效期
exprie key seconds 
//获取key的有效时间
ttl key
//切换key从时效性为永久性
persist key
key其他操作
rename key newkey //改名key,如果命名相同,会被覆盖
renamenx key new key	//如果命名相同,会报错防止数据丢失
sort	//对所有key进行排序

七. 数据库通用操作

  • 随着操作数据量增加,会出现大量的数据以及对应的key
  • redis为此划分16个数据库,编号从0-15,每个数据库之间的数据相互独立
db基本操作
select index //切换数据库
quit,ping

db相关操作
dbsize	//查看当前数据库的key数量
flushdb	//删除当前数据库的所有数据
flushall	//删除所有数据库的数据

总结

redis命令的话还是很多的,以上只列举了一些常用的,还有很多就不一一列举了。redis还有很多高级操作,例如持久化、事务、主从复制、哨兵、集群。有时间会再写一篇相关博客进行详细的学习。以上有什么错误希望可以指出了,一起讨论学习。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值