Redis学习笔记
Redis学习笔记
启动Redis
1 | redis-cli#进入交互模式 |
redis数据类型
Keys
任何的二进制数据都可以作为redis的key,比如图片之类的,但是大小最大只能有512MB
官方推荐的规范命名法
object-type:id 是官方推荐的命名方法(大概意思是用:分割层次结构)
1
user:1000
当object-type或者id由多个字符组成的时候,建议使用”.”或者”-“分割
1
comment:4321:reply.to
Strings
1 | set [key] [value] #设置键值对 |
Key Expiration
设置key的TTL(Time to live) ,当TTL到期的时候,key就会被自动销毁
有几点注意的
- Redis的过期时间分辨率是ms
- 即使server没有运行,计时也不会停止(Redis存储的是过期的日期)
相关命令
1 | expire [key] [seconds] #设置过期时间 |
Lists
概念问题:List != Array
To explain the List data type it’s better to start with a little bit of theory, as the term List is often used in an improper way by information technology folks. For instance “Python Lists” are not what the name may suggest (Linked Lists), but rather Arrays (the same data type is called Array in Ruby actually).
在Redis中,List指的是链表(Linked List),插入元素复杂度是线性的
1 | LPUSH #在头部插入元素(插入后返回元素个数) |
使用技巧
LTRIM和LPUSH配合使用,可以实现滚动更新列表元素
1 | LPUSH mylist <some element> |
Blocking Operations On Lists
假设有A、B两个线程,A向列表里面塞数据,B从列表读取数据,为了避免B在列表为空的时候做无效查询,引入BRPOP和BLPOP
1 | BRPOP key [key ...] timeout |
意义是进行对key的pop操作,如果key为空的话就等待{timeout}的时间,仍没有数据传入则操作结束
几点注意
- BLPOP和BRPOP对多个线程的返回顺序遵循线程发出请求的顺序
- 和LPOP以及RPOP不同,BLPOP和BRPOP返回的是两个元素的array,第一个是key,第二个才是value
- timeout到后,会返回NULL
Automatic creation and removal of keys
在redis中,当一个key为空的时候,redis会自动将其删除( Stream类型的数据除外),而读取一个不存在的key的时候,其返回结果就好像访问一个存在的空的key一样;同样,一个key会被创建,当这个key不存在而且我们尝试向其中插入元素;但是,当一个key已经存在的时候,插入的数据类型一定要匹配key的数据类型
Hashes
就简单的哈希,有点像是定义了一个名称为{key},变量名为field,值为value的结构体(?
很多命令似乎都是直接在对string的命令前面加个h
1 | hset key field value [field value ...] |
命令大全
1 | ping #检查redis服务是否在运行 |
Sets
sets是string的无序集合,支持查询某个元素是否在某个set中
1 | sadd key member [member ...] |
Sorted sets
有序集合,其中的元素不能相同,每个元素由用户指定score,排序规则如下:
- If B and A are two elements with a different score, then A > B if A.score is > B.score.
- If B and A have exactly the same score, then A > B if the A string is lexicographically greater than the B string. B and A strings can’t be equal since sorted sets only have unique elements.
1 | zadd key score member [score member ...] #指定数据的score |
redis 2.8还加入了按照字典序排序的功能
1 | ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX ZLEXCOUNT. |
如果想要更新元素的话,直接ZADD就行
Bitmaps
实际上是和位运算有关的一些函数,而不是一个数据类型
1 | setbit |
HyperLogLogs
一个好神奇的东西,用很少的内存来估计一组数据里面有多少不同的数据
操作上和set类似
1 | pfadd key element #向key里面“添加”元素 |
神奇之处在于,pfadd并没有真正往key里面添加元素,而是用了一些神奇的数学方法保存了key的状态,从而实现估计key里面有多少个相异元素的功能
好神奇哦
Redis的服务配置
挖个坑,以后再填