Redis 学习笔记(一)
-
五种数据结构
-
String
-
SET key value //存入字符串键值对
-
MSET key value [key value …] //批量存储字符串键值对
-
SETNX key value //存入一个不存在的字符串键值对
-
GET key //获取一个字符串键值
-
MGET key [key …] //批量获取字符串键值
-
DEL key [key …] //删除一个键
-
EXPIRE key seconds //设置一个键的过期时间(秒)
-
INCR key //将key中储存的数字值加1
-
DECR key //将key中储存的数字值减1
-
INCRBY key increment //将key所储存的值加上increment
-
DECRBY key decrement //将key所储存的值减去decrement
-
对象缓存
- SET user:1 value(json格式数据)
- MSET user:1:name zhangsan user:1:balance 888
- MGET user:1:name user:1:balance
-
分布式锁
-
SETNX product:10001 true //返回1代表获取锁成功
-
SETNX product:10001 false //返回0代表获取锁失败
-
SET product:10001 true ex 10 nx //防止程序意外终止导致死锁
-
-
-
hash
-
HSET key field value //存储一个哈希表key的键值
-
HSETNX key field value //存储一个不存在的哈希表key的键值
-
HMSET key field value [field value …] //在一个哈希表key中存储多个键值对
-
HGET key field //获取哈希表key对应的field键值
-
HMGET key field [field …] //批量获取哈希表key中多个field键值
-
HDEL key field [field …] //删除哈希表key中的field键值
-
HLEN key //返回哈希表key中field的数量
-
HGETALL key //返回哈希表key中所有的键值
-
HINCRBY key field increment //为哈希表key中field键的值加上增量increment
-
对象缓存
- HMSET user {userId}:name zhangsan {userId}:balance 1888
- HMSET user 1:name zhangsan 1:balance 1888
- HMGET user 1:name 1:balance
-
-
列表List
- LPUSH key value [value …] //将一个或多个值value插入到key列表的表头(最左边)
- RPUSH key value [value …] //将一个或多个值value插入到key列表的表尾(最右边)
- LPOP key //移除并返回key列表的头元素
- RPOP key //移除并返回key列表的尾元素
- LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
- BLPOP key [key …] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待
- BRPOP key [key …] timeout //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待
-
集合Set
-
Set常用操作
- SADD key member [member …] //往集合key中存入元素,元素存在则忽略, 若key不存在则新建
- SREM key member [member …] //从集合key中删除元素
- SMEMBERS key //获取集合key中所有元素
- SCARD key //获取集合key的元素个数
- SISMEMBER key member //判断member元素是否存在于集合key中
- SRANDMEMBER key [count] //从集合key中选出count个元素,元素不从key中删除
- SPOP key [count] //从集合key中选出count个元素,元素从key中删除
-
Set常用计算
- SINTER key [key …] //交集运算
- SINTERSTORE destination key [key …] //将交集结果存入新集合destination中
- SUNION key [key …] //并集运算
- SUNIONSTORE destination key [key …] //将并集结果存入新集合destination中
- SDIFF key [key …] //差集运算
- SDIFFSTORE destination key [key …] //将差集结果存入新集合destination中
-
-
有序集合ZSet
- ZSet常用操作
- ZADD key score member [[score member]…] //往有序集合key中加入带分值元素
- ZREM key member [member …] //从有序集合key中删除元素
- ZSCORE key member //返回有序集合key中元素member的分值
- ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
- ZCARD key //返回有序集合key中元素个数
- ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
- ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
- ZSet常用计算
- ZUNIONSTORE destkey numkeys key [key …] //并集计算
- ZINTERSTORE destkey numkeys key [key …] //交集计算
- ZSet常用操作
-
-
Redis在Linux下的安装
下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc # 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar xzf redis-5.0.3.tar.gz cd redis-5.0.3 # 进入到解压好的redis-5.0.3目录下,进行编译与安装 make # 修改配置 daemonize yes #后台启动 protected-mode no #关闭保护模式,开启的话,只有本机才可以访问redis # 需要注释掉bind #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可) # 启动服务 src/redis-server redis.conf # 验证启动是否成功 ps -ef | grep redis # 进入redis客户端 src/redis-cli # 退出客户端 quit # 退出redis服务: (1)pkill redis-server (2)kill 进程号 (3)src/redis-cli shutdown
-
Redis是单线程吗?
- Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的
-
Redis单线程为什么还能那么快?
- 因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题。
-
Redis单线程如何处理高并发的客户端链接?
- Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
- Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
-
高级命令
-
keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,当redis数据量比较大时,性能比较差,要避免使用
-
scan:渐进式遍历键
-
SCAN cursor [MATCH pattern] [COUNT count]
-
scan 参数提供了三个参数,第一个是 cursor 整数值(hash桶的索引值),第二个是 key 的正则模式,第三个是一次遍历的key的数量(参考值,底层遍历的数量不一定),并不是符合条件的结果数量。第一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历到返回的 cursor 值为 0 时结束。
注意:但是scan并非完美无瑕, 如果在scan的过程中如果有键的变化(增加、 删除、 修改) ,那么遍历效果可能会碰到如下问题: 新增的键可能没有遍历到, 遍历出了重复的键等情况, 也就是说scan并不能保证完整的遍历出来所有的键, 这些是我们在开发时需要考虑的
-
-
Info:查看redis服务运行信息,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:
-
Server 服务器运行的环境参数
-
Clients 客户端相关信息
-
Memory 服务器运行内存统计数据
-
Persistence 持久化信息
-
Stats 通用统计数据
-
Replication 主从复制相关信息
-
CPU CPU 使用情况
-
Cluster 集群信息
** -
Server 服务器运行的环境参数
-
Clients 客户端相关信息
-
Memory 服务器运行内存统计数据
-
Persistence 持久化信息
-
Stats 通用统计数据
-
Replication 主从复制相关信息
-
CPU CPU 使用情况
-
Cluster 集群信息
-
KeySpace 键值对统计数量信息
-
-