学习《Redis 入门指南 第二版》笔记。
适合看看文章同学:
1:不太了解 Redis 的各项指令,不知道 Redis 有什么特性。
2:平常只使用 key-value 存储,不了解其他结构的使用和应用场景。
3:复习基础知识和要点。
4:没事看看。。
PS:
Redis 非关系型数据库,虽然大部分还用作缓存。不过,是真可以用的数据库!
本章主要讲基本结构/基础语法/部分应用场景。
1:内存级别的数据库,在一台普通电脑上,Redis 3.X 便可以读取 10 万个键值对(现在的Redis官方版本已经更新到了4.X,性能会更好)。
2:TTL生存时间(我更习惯叫过期时间),代表意义为 Time To Live.
3:关于Redis 和 Memcached 的性能问题。
理论上 Memcached 为多线程模型,会比 Redis 性能好。
但是,Redis的性能已经足够好,在大部分场合下都不会成为它的瓶颈。
我们更应该关注的是 Redis 和 Memcached 的应用场景。
4:如何修改 Redis 监听端口
启动时修改 Redis-server --port XXXX
在 Redis.conf 中修改 port 为 XXXX
5:Redis 可以选择 0-15 共 16 个 ‘数据库’,可以使用 SELECT 0-15 来选择
注意并不是我们理解的平常的数据库。
最主要的原因是多个数据库之间并不是完全隔离的。
适合存同种数据单不同方向,比如 1号->存测试数据, 2号->存生产数据。
6:字符串类型
应用场景:
用于常规计数,常规的 key-value 存储。
常用操作
设置一个值为(字符串类型) SET key value
取出一个值为(字符串类型) GET key
递增数字 INCR key
获取字符串长度 STRLEN key
7:散列类型
应用场景:
是一个string类型的field和value的映射表,hash特别适合用于存储对象。
存储部分变更的数据,如用户信息等。
对于将对象存储成字符串而言,hash会占用更少的内存,并且可以更方便的存取整个对象.
常用操作:
设置一个值为(HASH类型) HSET key field value
取出一个值为(HASH类型) HGET key field
一次获取多个值 HMGET key field [field ...]
获取该HASH的全部字段和字段值 HGETALL key
判断字段是否存在 HEXISTS key field
当字段不存在时赋值 HSETNX key field value
删除字段 HDEL key field [filed ....]
只获取该字段名(全部) HKEYS key
只获取该字段值(全部) HVALS key
8:列表
应用场景:
由于 列表(list) 内部是由双向链表实现的,所以从头和尾获取和插入是非常快的。
不过也正是因为如此,通过索引获得元素的速度会很慢。
由于 LIST 的特性,更适合做日志存储,消息队列等功能。
常用操作: 向列表左端增加元素(列表类型) LPUSH key value 向列表右端增加元素(列表类型) RPUSH key value 从左端取出一个元素(等于在这个list中删除了这个元素) LPOP key 从右端取出一个元素(等于在这个list中删除了这个元素) LPOP key 获得列表的总个数 LLEN number 获取列表片段 LRANGE key start stop 删除列表中的值 LREM key count value - 当 count > 0 时候,从列表左边删除 count 个 值为 value 的元素。 - 当 count < 0 时候,从列表右边删除 count 个 值为 value 的元素。 - 当 count = 0 时候,删除列表中所有值为 value 的元素。 通过索引查找元素,就和数组一样 LINDEX key index 通过索引为元素赋值 LSET key index value
9:集合
对于集合(set)来说,是无序但是有唯一性的,列表(list)是有序但是不唯一的。 内部由 hash table 实现。 应用场景: set 就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的set数据结构,可以存储一些集合性的数据。set中的元素是没有顺序的。 案例: 在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。
Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
常用操作:
向集合添加一个或者多个元素 SADD key member [member ...]
在集合内删除一个或者多个元素 SERM key member [member ...]
获取集合内所有元素 SMEMBERS key
查看集合内是否有该元素 SISMEMBER key member
差级运算 SDIFF key [key ...] 例如 {1,2,3} - {2,3,4} = {1}
交集运算 SINTER key [key ...] 例如 {1,2,3} - {2,3,4} = {2,3}
并集运算 SUNION key [key ...] 例如 {1,2,3} - {2,3,4} = {1,2,3,4}
获取集合中的个数 SCARD key
10:有序集合
有序集合和集合相比
- 有序集合(sorted set)增加了一个权重参数score。
有序集合和列表相比
- 二者都是有序的,都可以获得范围元素。
- 有序集合比列表更费内存。
- 有序集合是通过散列表和跳跃表实现的(这个目前不太懂)。
- 列表中不能随意调整某个元素的位置,但是有序集合可以。
应用场景:
比如要对一个学生的成绩排序,那么key就可以是学号,socore就可以是分数,那么在一进入队列时候,就已经进行了天然的排序。
还可以用在有权重的队列上面,权重高的对列任务先执行。
添加一个有序元素 ZAAD key score member
获得一个元素的分数 ZSCORE key score
获得排序之后的集合 ZRANGE key start stop
2018/07/17 《Redis 入门指南 第二版》 学习笔记(一)
原文:https://www.cnblogs.com/25-lH/p/9323794.html