redis各类型实现&命令 笔记
来源:互联网 发布:日期提醒软件 编辑:程序博客网 时间:2024/06/14 14:36
比较基础的命令不做过多赘述(例如string的set、get等),主要记录一下各类型的大概实现方式和需要费力记忆的命令,帮助理解和更好地运用redis各类型以解决工作中的问题。
需要注意的是:redis中各数据类型是不能嵌套的。不像编程语言中A类可以拥有成员属性B类。
1、string类型:
string类型是二进制安全的,因为在redis底层的实现中,string类型是一个结构体,内容如下:
struct sdshdr{long len;long free;char buf[];}
因为使用len记录了总长度,使用free记录了buf数组中剩余可用长度,所以不需要使用nil字符作为结束,从而实现二进制安全
在redis中,也使用string类型保存数字,从而拥有incr、decr等方法,具体实现细节隐藏在底层,不细表了。
mset命令:一次set多个key的值,但若失败一个,则整个命令失效(类似于事务机制,要么都成功,要么都不成功),不会出现部分成功部分失败的情况。
msetnx 命令:参考mset,但比mset多一个限制条件:若其中一个key已存在,则也视为事务失败
2、list列表:
列表在redis中使用双链表实现,但并不提供精确查找(精确查找需要遍历链表,时间复杂度为O(n) ),只能范围查找,所以更加适用于做各类排行榜、队列等。
lrange:获取指定区间的元素(只读)
ltrim:截取指定区间元素(只写),若成功,返回OK(不返回截取后的内容),会修改该列表
blpop/brpop,阻塞式地pop,但它有个特点是可以一次pop多个list,并且pop的顺序是从左到右(例如从list1-list2-list3的顺序),若list1存在内容,就会永远pop出list1的内容直到list1为空,再去pop出list2的内容,所以可用于实现优先级队列,同时它带有timeout属性(以秒为单位),故可结合起来实现带超时的优先级队列。若超时,返回的是nil(编程语言中为NULL或None,视语言而定)
3、set集合:
集合内的元素是无序的,在redis中集合实现的方式是通过hashtable,所以它查找和删除元素的时间复杂度为0(1),它主要应用场景是快速查找元素是否存在、存储不可重复的数据,例如维护一个网站的用户名记录,可快速获取该用户名是否已存在;集合一般用于做记录,例如网站中用户一天只能投票一次,就可以使用集合存储已经投过票的用户id,从而避免重复投票
spop:删除并返回set中的一个随机元素
smove:将一个集合中的某元素移动到另一个集合中,整个操作是原子的
- redis各类型实现&命令 笔记
- redis各类型实现&命令
- Redis各类型应用场景
- Redis各类型应用场景
- 【Redis笔记】2.Redis命令
- [Redis学习笔记]-Redis命令
- redis各类型及应用场景
- redis命令,学习笔记
- redis命令学习笔记
- redis基本命令笔记
- redis 命令操作笔记
- redis-入门命令笔记
- redis学习笔记(11)---字符串命令及实现
- redis学习笔记(13)---列表命令及实现
- redis存取各类数据
- Redis笔记2:keys命令
- 【Redis】 redis setnx命令实现分布式锁
- Redis 各类型常用方法与 运用场景
- Java常见的四种引用
- 破解 idea 2016
- PAT甲级练习题A1023. Have Fun with Numbers (20)
- 矩阵乘法 Matrix Power Series
- C++中函数默认参数匹配问题
- redis各类型实现&命令 笔记
- ZooKeeper自定义数据日志目录
- android 关机充电 充电动画 从入门到精通
- Android.mk初识
- Android root相关材料
- PHPCMS网站登陆增加点触验证码
- 12、canvas标签之阴影
- hdu5092
- poj 2635 The Embarrassed Cryptographer