redis使用-进阶

介绍:

基于内存的、key-value类型的、数据库 ;多种数据结构 ; 

定期通过异步操作吧数据库数据flush到硬盘

性能:每秒可以处理超10W次读写请求

相关常用命令:

set k1 111

exist k1

del k1

ttl 返回键的剩余过期时间

当 key 不存在时,返回 -2 。 
当 key 存在但没有设置剩余生存时间时,返回 -1 。 
否则,以秒为单位,返回 key 的剩余生存时间。

 

 

 

expire k1 10 设置10S过期时间

type k1

lpush list1 "1"  插入到列表

数据类型:

1、string类型

实际可以是字符串或者数字

可以设置过期时间;计数incr k1;

应用场景:缓存或计数器

2、Hash类型 (散列类型)

设置:

hset user name zhansan

hset user age 28

取值:

hget user name

hget user age

使用场景

存储用户信息或商品信息

我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:
第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题
第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。

也就是说,Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。很好的解决了问题。

 

 

 

 

 

 

 

3、List类型

目的:存储有序的字符串列表

结构:列表类型内部使用的是双向链表

操作:向列表两端添加元素push和弹出元素pop

命令:lpush rpush  lrange-从右到左获取列表的所有元素

使用场景:商品列表、菜单列表

4、set类型

特点:不重复且没有顺序

命令:

sadd s1 a b c d

求交集sinter    

求并集sunion

使用情景:

  • 利用值的唯一性,和集合提供的,对两个集合间的数据进行交集、并集、差集运算的操作,来推荐好友和获取共同好友等
  • 利用值的唯一性,可以统计访问网站的所有独立 IP

5、zset

介绍:有序集合;每个元素都关联一个分数

能够获得分数最高或最低的前N个元素、获取指定分数范围的元素

底层:

所以ZSet采用了一种跳跃表的实现。这个实现有点类似于Kafka存储消息是使

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值