Redis学习历程

基础和应用

什么是Redis?

Redis是互联网技术领域使用最为广泛的储存中间件,有着超高的性能;完美的文档;简洁易懂的源码和丰富的客户端库支持。被许多互联网大厂使用。

Redis能用来做什么?

缓存!相对于Memcache而言,Redis更容易被理解、使用和控制。
分布式锁!Redis里面的锁方法都是别人封装好的,拿过来基本就可以使用,内部细节没必要了解?
业务范围:贴吧管理,减少数据库压力。
其他方法后面娓娓道来。

Redis数据结构

五种基础数据结构

Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一的key值来获取相应的value数据。不同的数据机构对应不同的value结构。

1. 字符串:string 字符数组。

·一般用来缓存用户信息。将用户信息结构体使用json序列化成字符串,然后塞进Redis进行缓存。取信息也要反序列化。
·字符串支持修改,内部结构类似Arraylist,采用预分配冗余空间的方式减少内存的频繁分配。
·当字符串长度小于1MB时,会扩容1mb的空间。
·最大长度为512MB。
下面展示一些 内联代码片

set <key> <value>
get <key> 
mset <key> <value> <key> <value> <key> <value>...
mget <key> <key> <key> ...
expire <key> 5
setex <key> 5 <value> (ex = exist)
setnx <key> <value> (nx = not exist)
incr <key> //如果age是一个整数
incrby <key> 5  //如果age是一个整数

2. 列表:list链表

·相当于LinkedList。元素很多的时候会转为quicklist,使用ziplist.与链表相结合的方法储存各个结点。
·插入和删除非常快,时间复杂度为O(1)
·索引定位非常慢,复杂度为O(n)
·使用双向指针顺序,支持前后遍历
·弹出(lpop)最后一个元素之后,就会被回收
·常用来做异步队列使用,先进先出。右边进左边出。
·也可用来做栈。先进后出。右边进右边出。

rpush <key> <value> <value> <value>...
llen <key> //队列
lpop <key> //弹出
lindex <key> nindex //对链表进行遍历,index可以为-1,表示最后一位数
lrange <key> 0 -1 //获取所有元素
ltrim <key> 1 -1 //剪切掉0
ltrim <key> 1 0 //清空链表

3.字典:hash

·相当于HashMap,是无序字典,内部储存了很多键值对。
·只能储存字符串
·java的rehash操作耗时,需要一次性全部rehash,但是Redis为了追求高性能,于是采用渐进式rehash策略

hset <key> <field> <value> //可以用来更新,添加
hgetall <key>
hget <field>
hmset <key> <field> <value> <field> <value> <field> <value> ...

4.集合:set

·相当于HashSet,内部键值对无序且唯一
·拥有去重功能

sadd books python c
SISMEMBER books java
scard books
spop books

5.有序列表: zset

·最容易考
·类似于java的sortedSet和HashMap的集合体
一方面他是set保证内部value唯一性,另一方面他可以给每个value赋值一个score,代表这个value的排序权重。
·内部结构:跳跃表

zadd books  9.0 " think in java"
zrange books 0 -1
zrevrange books 0 -1
zcard books // 相当于count()
zrank books "books name"
zscore books "books name"
zrangebyscore books 0 8.91 // 根据分值区间遍历 zset  -inf代表无穷大
zrangebyscore books -inf 8.91 withscores
zrem books "think in java"//删除

总结

list、set、hash、zset是容器型数据结构,通用规则:

  1. 如果容器不存在就创建一个容器。
  2. 如果容器里的元素没了就删除容器,释放内存。

Redis里面所有的数据结构都可以设置过期时间,时间到了,Redis就会自动删除相应的对象。但是如果一个字符串已经设置了过期时间,然后又调用set方法修改了它,他的过期时间就会消失。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值