Redis入门 -学习笔记(1)
2016-08-15 22:19
661 查看
1.Redis入门
官网地址中文文档地址
centos7 Redis安装教程 (我用的腾讯云学生机参考的这个)
简介
开源,高性能,键值对(key-value)存储的缓存系统存储在内存中,所以速度快。异步存储到硬盘中,不影响服务。
每个键设置生存时间TTL —->缓存。
安装(略)
启动和停止
redis-server redis服务器 redis-cli redis客户端 redis-cli shutdown redis关闭
1.遇到的问题及解决
我在使用redis-cli执行ping命令时候无响应,原因其实是启动redis-server 时候 按了
ctrl+z导致redis服务挂起,所以shutdown 和 ping 都无响应
解决办法:
用终止进程的方法,执行命令
ps -ef |grep redis #查询正在运行的redis进程 找到PID 号
之后执行
kill -9 PID #PID是你查到的进程号
之后重启redis-server
redis-server & #&表示在后台运行
不要按ctrl+z。。。。
等一会。。。
一会。。。
好。。。
ctrl-c 是发送SIGINT信号,终止一个进程; ctrl-z 是发送 SIGSTOP信号,挂起一个进程; ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。 可以通过jobs查看当前有多少在后台运行的命令; 通过fg命令将后台中的命令调至前台继续运行; 也可以用bg将一个在后台暂停的命令,变成继续执行 (在后台执行)
2. redis 默认使用6379 port
redis-server --port 6400 自定义端口
3. redis-cli PING 命令来检测客户端是否与Redis连接正常(也可以在交互模式下执行PING)
PONG #回复这个表示连接正常
4. redis-cli info 命令 可用来监控
# Server redis_version:3.0.0 #redis版本 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:17f78a051f40b183 redis_mode:standalone os:Linux 3.10.0-123.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.5 #gcc版本 process_id:21941 #当前redis进程号 kill的就是这个! run_id:d0cd9b6915b1bbe4c60d0a00cf8fff438a7f389b tcp_port:6379 #端口号 uptime_in_seconds:1026 #启动后运行的时间 uptime_in_days:0 hz:10 lru_clock:11309124 config_file: # Clients #客户端 connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 ...
5. 多数据库
Redis默认支持16个数据库,客户端可以指定把数据存在哪一个数据库里面
127.0.0.1:6379[1]> SELECT 0 #默认就是选择0号数据库 OK 127.0.0.1:6379> GET menduo #上面存过的键值对 "21" #得到结果 127.0.0.1:6379> SELECT 1 #切换到1号数据库 OK 127.0.0.1:6379[1]> GET menduo (nil) #由于没有menduo这个键值对返回空
2.key相关基本操作(更多请参考文档)
127.0.0.1:6379> keys * #取到所有key 1) "posts:count" ... 6) "k1" 7) "car" 8) "k3" 9) "k2" 10) "wangergou" 11) "num" 127.0.0.1:6379> DEL key k1 k2 k3 #删除指定的key 可以一个也可以删除多个 (integer) 3 127.0.0.1:6379> KEYS * 1) "posts:count" ... 6) "car" 7) "wangergou" 8) "num"
127.0.0.1:6379> type menduo #返回指定key的类型 string
127.0.0.1:6379> exists java #检查对应类型是否存在 (integer) 1 #存在返回1 127.0.0.1:6379> exists javaa #不存在返回0 (integer) 0
127.0.0.1:6379> set time 5 OK 127.0.0.1:6379> expire time 5 #设置对应key的过期时间 (integer) 1 127.0.0.1:6379> get time "5" 127.0.0.1:6379> get time #5秒后 取对应key的值,不存在了。 (nil)
127.0.0.1:6379> set time 5 OK 127.0.0.1:6379> expire time 3600 (integer) 1 127.0.0.1:6379> PTTL time #返回剩余的毫秒数,相应的还有TTL命令返回剩余秒数 (integer) 3581276 127.0.0.1:6379> PERSIST time #删除key的过期时间 (integer) 1 127.0.0.1:6379> TTL time #删除后过期时间为-1 (integer) -1
127.0.0.1:6379> MOVE java 1 #移动key到 另一数据库(前面说过redis数据库是编号的,默认是0。这里将key移动到1号) (integer) 1 127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> GET java "I LOVE YOU,BUT PHP..." 127.0.0.1:6379[1]> SELECT 0 #再回到0号 对应key不存在了返回0 OK 127.0.0.1:6379> GET java (nil)
127.0.0.1:6379[1]> RENAME java php #重命名key OK 127.0.0.1:6379[1]> GET php "I LOVE YOU,BUT PHP..."
3. 基本类型
redis一共有五种基本类型 分别是Strings(字符串)、
Lists(列表)、
Hashes(哈希)、
Sets(集合)、
Sorted Sets(有序集合)
Strings 字符串类型
一个字符串类型的值最多能存储512M字节的内容。
基本指令
127.0.0.1:6379> SET java "I LOVE YOU" #设置对应key的value值 OK 127.0.0.1:6379> GET java #根据key取到value "I LOVE YOU" 127.0.0.1:6379> APPEND java ",BUT PHP..." #像对应key尾部追加字符串 (integer) 21 127.0.0.1:6379> GET java #结果 "I LOVE YOU,BUT PHP..." 127.0.0.1:6379> STRLEN java #得到对应key 字符串长度 (integer) 21 127.0.0.1:6379[1]> SETNX php ... #当key存在时,不执行设置命令并返回0 (integer) 0 127.0.0.1:6379[1]> SETNX php2 ... #当key不存在,进行设置返回1 (integer) 1 127.0.0.1:6379[1]> keys * 1) "php2" 2) "php" 127.0.0.1:6379[1]> GET php "I LOVE YOU,BUT PHP..." 127.0.0.1:6379[1]> GETRANGE php 0 5 #getrange 用于截取字符串 "I LOVE" MGET MSET #这两个命令是用来获取/设置 多个key的value GETBIT key 数字 #获取对用应数字位的值 0或1 。数字叫offset 偏移量
INCR命令 递增.如果redis没有这个字段,则创建并且初始化1,下次在调用则为2
127.0.0.1:6379> INCR num #原来没有 所以为1 (integer) 1 127.0.0.1:6379> GET num "1" 127.0.0.1:6379> INCR num #现在递增后为2 (integer) 2 127.0.0.1:6379> GET num "2"
当然,只能对数字进行递增操作,如果对字符串操作会报错
127.0.0.1:6379> SET wangergou niu OK 127.0.0.1:6379> INCR wangergou (error) ERR value is not an integer or out of range
127.0.0.1:6379> GET num "2" 127.0.0.1:6379> DECR num #递减1 (integer) 1 127.0.0.1:6379> GET num "1" 127.0.0.1:6379> INCRBY num 5 #递增指定数字 (integer) 6 127.0.0.1:6379> GET num "6" 127.0.0.1:6379> DECRBY num 5 #递减指定数字 (integer) 1 127.0.0.1:6379> GET num "1"
Lists 列表类型
list是一个有序列表,而且是双向的(内部实现是双向链表)。因此可以向两端添加元素。
把链表想象成一个队列,会有 左L(头部) 右R(尾部) 两边操作
一个列表可以包含2^31-1个元素
操作两端的元素相对于操作中间要快
127.0.0.1:6379[1]> LPUSH list a #从左边向list加入一个元素 (integer) 1 127.0.0.1:6379[1]> LPUSH list b c d #可以加入多个 (integer) 4 127.0.0.1:6379[1]> LRANGE list 0 4 #取到第一个数字到第二数字的元素的值 1) "d" 2) "c" 3) "b" 4) "a" 127.0.0.1:6379[1]> RPUSH list z #从右边加入元素 (integer) 5 127.0.0.1:6379[1]> RPUSH list y x #从右边加入多个 (integer) 7 127.0.0.1:6379[1]> LRANGE list 0 7 1) "d" 2) "c" 3) "b" 4) "a" 5) "z" 6) "y" 7) "x" 127.0.0.1:6379[1]> LRANGE list -3 -1 #可以是反方向坐标。左边0开始 右边则从-1开始 1) "z" 2) "y" 3) "x" 127.0.0.1:6379[1]> LLEN list #获取list的长度 (integer) 7 127.0.0.1:6379[1]> LINDEX list 4 #根据坐标获取元素值 "z" 127.0.0.1:6379[1]> LINDEX list -4 #负坐标 "a"
127.0.0.1:6379[1]> LPOP list #从坐标弹出一个元素 "d" 127.0.0.1:6379[1]> RPOP list #从右边弹出一个元素 "x" 127.0.0.1:6379[1]> LLEN list (integer) 5 127.0.0.1:6379[1]> LRANGE list 0 5 1) "c" 2) "b" 3) "a" 4) "z" 5) "y"
127.0.0.1:6379[1]> LREM list 0 c #移除指定index的元素 (integer) 1 127.0.0.1:6379[1]> LREM list -1 y #成功返回0 (integer) 1 127.0.0.1:6379[1]> LREM list -1 y #上面移除过了,所以移除失败返回0 (integer) 0
127.0.0.1:6379[1]> LRANGE list 0 2 1) "b" 2) "a" 3) "z" 127.0.0.1:6379[1]> LTRIM list 1 2 #对指定list进行修剪,留下现对于原来的指定范围 OK 127.0.0.1:6379[1]> LRANGE list 0 1 1) "a" 2) "z" 127.0.0.1:6379[1]> LSET list 0 y #设置指定位置元素的值 OK
Hashes 散列类型
是一个可以用来表示对象的类型
127.0.0.1:6379[1]> HSET blog title redis # 设置对应key 的 属性的值 (integer) 1 127.0.0.1:6379[1]> HGET blog title #取到对应key属性的值 "redis" 127.0.0.1:6379[1]> HMSET blog time 2016 content blablabla #设置多个属性 OK 127.0.0.1:6379[1]> HMGET blog title time content #取到多个属性 1) "redis" 2) "2016" 3) "blablabla"
#同样和String一样 有 HSETNX 不存在时赋值命令
127.0.0.1:6379[1]> HDEL blog time #删除属性 (integer) 1 127.0.0.1:6379[1]> HGET blog time (nil)
127.0.0.1:6379[1]> HEXISTS blog title #判断属性是否存在,存在为1 (integer) 1 127.0.0.1:6379[1]> HEXISTS blog time #不存在为0 (integer) 0 127.0.0.1:6379[1]> HGETALL blog #取出全部的域和值 1) "title" 2) "redis" 3) "content" 4) "blablabla"
127.0.0.1:6379[1]> HSET blog time 2016 (integer) 1 127.0.0.1:6379[1]> HINCRBY blog time 1 ##指定对象的属性 递增 指定数字 (integer) 2017
127.0.0.1:6379[1]> HKEYS blog #返回对应key的全部属性 1) "title" 2) "content" 3) "time" 127.0.0.1:6379[1]> HVALS blog #返回对应key的全部属性的value 1) "redis" 2) "blablabla" 3) "2017" 127.0.0.1:6379[1]> HLEN blog #返回对应key的属性数量 (integer) 3
Sets 集合类型
与list列表 相似,但是它是无序,且唯一的
127.0.0.1:6379[1]> SADD set a #像指定集合中插入元素 (integer) 1 127.0.0.1:6379[1]> SADD set a #插入同一个,返回0插入失败。因为set唯一 (integer) 0 127.0.0.1:6379[1]> SREM set a #移除元素 (integer) 1 127.0.0.1:6379[1]> SADD set a b c #插入多个 (integer) 3 127.0.0.1:6379[1]> SMEMBERS set #返回全元素的值 1) "c" 2) "b" 3) "a" 127.0.0.1:6379[1]> SCARD set #返回集合元素数量 (integer) 3 127.0.0.1:6379[1]> SISMEMBER set a # s is member 命令判断 a是否在集合set中 (integer) 1 #在 返回1 127.0.0.1:6379[1]> SISMEMBER set x (integer) 0 #不在 返回0
127.0.0.1:6379[1]> SADD set1 a (integer) 1 127.0.0.1:6379[1]> SADD set1 b (integer) 1 127.0.0.1:6379[1]> SADD set1 c (integer) 1 127.0.0.1:6379[1]> SADD set2 b c d (integer) 3 127.0.0.1:6379[1]> SDIFF set1 set2 #返回set1 相对后面指定的key中不存在的元素 后面指定的key 可以一个也可以多个 (差集set1-set2) 1) "a" 127.0.0.1:6379[1]> SDIFFSTORE set3 set1 set2 #把sdiff产生的结果存入另一个集合(set3) (integer) 1 127.0.0.1:6379[1]> SMEMBERS set3 1) "a"
127.0.0.1:6379[1]> SINTER set1 set2 #返回交集 1) "c" 2) "b" 127.0.0.1:6379[1]> SINTERSTORE set4 set1 set2 #将结果存入目的集合 (integer) 2 127.0.0.1:6379[1]> SMEMBERS set4 1) "c" 2) "b"
127.0.0.1:6379[1]> SUNION set1 set2 #取并集 1) "b" 2) "a" 3) "c" 4) "d" 127.0.0.1:6379[1]> SUNIONSTORE set5 set1 set2 #将并集存入目标集合 (integer) 4 127.0.0.1:6379[1]> SMEMBERS set5 1) "b" 2) "a" 3) "c" 4) "d"
SPOP key [count] # !!随机!!弹出key中指定数量的元素 127.0.0.1:6379[1]> SPOP set1 "a" 127.0.0.1:6379[1]> SPOP set1 "c" 127.0.0.1:6379[1]> SMOVE set2 set1 b #移动前一个set的元素b 到后一个set集合 (integer) 1
Sorted Sets 有序集合类型
有序的集合!
O(lg(N))完成添加删除更新
相比list(也是有序的)更耗内存
ZADD key score(可以是整数,也可是浮点数) member 127.0.0.1:6379[1]> ZADD zset 10 a #添加一个元素 (integer) 1 127.0.0.1:6379[1]> ZADD zset 100 b 98 c #添加多个 (integer) 2 127.0.0.1:6379[1]> ZCARD zset #统计集合一共多少元素 (integer) 3 127.0.0.1:6379[1]> ZCOUNT zset 99 100 #返回指定范围元素数量 (integer) 1 127.0.0.1:6379[1]> ZSCORE zset b #获取指定元素的评分 "100" 127.0.0.1:6379[1]> ZRANK zset b #从小到大的排名 (integer) 3 127.0.0.1:6379[1]> ZREVRANK zset b #返回从大到小的排名 (integer) 0
127.0.0.1:6379[1]> ZADD zset 30 d (integer) 1 127.0.0.1:6379[1]> ZINCRBY zset 35 d #指定元素增加评分score,返回增加后的结果 "65"
相关文章推荐
- redis入门指南学习笔记
- Redis学习笔记之入门基础知识——简介
- Redis学习笔记(一)—— 入门
- Redis学习笔记1--入门篇
- Redis学习笔记1--入门篇
- Redis学习笔记(二)--NoSQL入门概述(二)
- redis入门学习笔记
- Redis入门学习笔记一
- Redis学习笔记之入门基础知识——其他特性
- redis入门指南 学习笔记(一) redis与memcached优劣
- Redis学习笔记1--入门篇
- Redis3.0.5学习笔记(一)基础入门
- Redis学习笔记之入门基础知识——五种数据类型
- redis入门指南 学习笔记(二) Redis的多数据库
- Visual C++ 学习笔记( 一 ) C++ 入门(转rockybug)
- c++入门学习笔记继承
- webservice学习笔记——入门篇
- 李浩学习计算机系列笔记——ADO.NET基础入门
- Spring学习笔记:2-Spring中IoC的入门实例
- c++入门学习笔记--类和对象