本文共 10084 字,大约阅读时间需要 33 分钟。
==1)linux:==
wget http://download.redis.io/releases/redis-3.2.9.tar.gztar xvf redis-3.2.9.tar.gzcd redis-3.2.9make install PREFIX=/root/svr/redis-3.2.9 #安装src/redis-server ../redis.conf& #启动src/redis-cli #客户端连接
==2)windows==
百度 N多。步骤简单。如:==1)【set key value】==:设置 key 对应值。
获取 key 的对应值。get key
127.0.0.1:6379> set key valueOK127.0.0.1:6379> get key"value"
==2)【setnx key value】==设置 key 对应的值,如果 key 存在,返回0 , nx 是 not exist的意思。
127.0.0.1:6379> setnx key value(integer) 0127.0.0.1:6379> setnx keynew value(integer) 1
*==3)【keys 】==:查找key
127.0.0.1:6379> keys * 1) "key2" 2) "k4" 3) "k3" 4) "setname"127.0.0.1:6379> keys k*1) "key2"2) "k4"3) "k3"
==4)【exists key】==:查看 key 是否存在
127.0.0.1:6379> exists key(integer) 1127.0.0.1:6379> exists abd(integer) 0
存在返回1,不存在,返回0
==5)【del key】==:删除某个key127.0.0.1:6379> del keynew(integer) 1127.0.0.1:6379> del keynew(integer) 0
第一次返回1,删除成功,第二次删除失败返回0.
==6)【expire】==:设置过期时间(单位秒)
127.0.0.1:6379> expire key 40(integer) 1127.0.0.1:6379> ttl key(integer) 36127.0.0.1:6379> ttl key(integer) 33127.0.0.1:6379> ttl key(integer) 29127.0.0.1:6379> ttl key(integer) -2
ttl 查看剩下多少时间,返回负数则 key 失效,key 不存在。
==7)【setex】==:设置key同时,设定超时时间。
127.0.0.1:6379> setex key 10 valueOK127.0.0.1:6379> ttl key(integer) 6
==8)【mset】==:一次性设置多个key的值,成功返回ok,表示所有值都设置了,失败返回0,表示没有任何值被设置。
127.0.0.1:6379> mset key value key1 value key3 vlaue2OK
==9)【getset oldkey newkey】==:设置 key 的值,并返回 key 的旧值。
127.0.0.1:6379> getset key aaaaa"value"
==10)【mget】==:一次获取多个key的值,对于的key不存在,则对应返回 nil
127.0.0.1:6379> mget key key1 key2 key3 key41) "aaaaa"2) "value"3) "aaaa"4) "vlaue2"5) (nil)
==11)【incr intkey】==:对key的值做加加操作,并返回新的值,注意 incr 一个不是 int 的value,会返回错误,incr 一个不存在的key 则会设置key为 1
127.0.0.1:6379> incr key(error) ERR value is not an integer or out of range127.0.0.1:6379> incr ccc(integer) 1127.0.0.1:6379> incr ccc(integer) 2127.0.0.1:6379> incr ccc(integer) 3
==12)【incrby intkey number】==:同incr
类似,加指定的值,key不存在时候,会设置key,并认为越来的value 为 0 .
127.0.0.1:6379> incrby ccc 100(integer) 103127.0.0.1:6379> incrby aaa 10(integer) 10
==13)【decr】==:对key的值做减减操作,如果 decr 一个不存在的 key , 则设置 key 为 -1
127.0.0.1:6379> decr bbb(integer) -1127.0.0.1:6379> decr bbb(integer) -2127.0.0.1:6379> decr aaa(integer) 9
==14)【decrby】==:对key的值做指定的减减
127.0.0.1:6379> decrby aaa 100(integer) -91
==15)【append】==:制定 key 的字符串追加 value, 返回新字符串的长度。
127.0.0.1:6379> get key"aaaaaaaaa"127.0.0.1:6379> append key bbbb(integer) 13127.0.0.1:6379> get key"aaaaaaaaabbbb"
==16)【strlen】==:取指定 key 的 value 值的长度。
127.0.0.1:6379> strlen key(integer) 13
==17)【persist】==: 取消过期时间
127.0.0.1:6379> setex time 1000 vvvvOK127.0.0.1:6379> ttl time(integer) 996127.0.0.1:6379> persist time(integer) 1127.0.0.1:6379> ttl time(integer) -1127.0.0.1:6379> get time"vvvv"
==18)【select】==:选择数据库(0-15库),单机版本,有数据库的概念,可以使用select 进行切换。
127.0.0.1:6379> keys * 1) "bbb" 2) "key2" 3) "k4" 4) "k3"127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> keys *(empty list or set)
==19)【move】==:把某个key移动到其他库。
127.0.0.1:6379> move bbb 1(integer) 1127.0.0.1:6379> get bbb(nil)127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> keys *1) "bbb"
==20)【randomkey】==:随机返回一个key
127.0.0.1:6379> randomkey"k3"127.0.0.1:6379> randomkey"k4"127.0.0.1:6379> randomkey"key2"127.0.0.1:6379> randomkey"time"
==21)【rename】==:重命名
127.0.0.1:6379> rename k3 k33333OK
==22)【type】==:返回数据类型
127.0.0.1:6379> type cccstring
23)==【dbsize】==:返回 key 的数量
127.0.0.1:6379> dbsize(integer) 15
==24)【info】==:输出redis信息
127.0.0.1:6379> info# Serverredis_version:3.2.9。。。。。。executable:/data/redis/redis-3.2.9/src/redis-serverconfig_file:/data/redis/redis-3.2.9/redis.conf# Clientsconnected_clients:1。。。。# Memoryused_memory:822920。。。。。# Persistenceloading:0。。。。。。# Statstotal_connections_received:4。。。。。# Replicationrole:master。。。。# CPUused_cpu_sys:76.85。。。。# Clustercluster_enabled:0# Keyspacedb0:keys=15,expires=0,avg_ttl=0db1:keys=1,expires=0,avg_ttl=0
==25)【config get|set】== : 显示与修改配置
127.0.0.1:6379> config get '*port*'1) "port"2) "6379"3) "slave-announce-port"4) "0"
三、数据类型
==1)String字符串:==set key value
127.0.0.1:6379> set string 'aaaa'OK127.0.0.1:6379> get string"aaaa"
==2)Hash(哈希)==
hmset name key1 value1 key2 value2
hashMap<key ,value>
127.0.0.1:6379> hmset myhash will 111 fff 2222 aaa 1111 ccc 3333OK127.0.0.1:6379> hget myhash will"111"127.0.0.1:6379> type myhashhash
==3)List(列表)==
127.0.0.1:6379> lpush mylist redis(integer) 1127.0.0.1:6379> lpush mylist mogodb(integer) 2127.0.0.1:6379> lpush mylist hbase(integer) 3127.0.0.1:6379> lrange mylist 0 101) "hbase"2) "mogodb"3) "redis".........127.0.0.1:6379> lrange mylist 0 101) "hbase"2) "hbase"3) "hbase"4) "hbase"5) "mogodb"6) "redis"127.0.0.1:6379> lrem mylist 2 hbase(integer) 2127.0.0.1:6379> lrange mylist 0 101) "hbase"2) "hbase"3) "mogodb"4) "redis"
==4)Set(集合)==
格式:sadd name value
127.0.0.1:6379> sadd myset redis(integer) 1127.0.0.1:6379> sadd myset redis(integer) 0127.0.0.1:6379> sadd myset hbase(integer) 1127.0.0.1:6379> sadd myset mogodb(integer) 1127.0.0.1:6379> smembers myset1) "mogodb"2) "hbase"3) "redis"
==5)zset(sorted set:有序集合)==
127.0.0.1:6379> zadd myzset 1 redis(integer) 1127.0.0.1:6379> zadd myzset 2 redis(integer) 0127.0.0.1:6379> zadd myzset 3 mogodb(integer) 1127.0.0.1:6379> zadd myzset 1 hbase(integer) 1127.0.0.1:6379> zrangebyscore myzset 0 1001) "hbase"2) "redis"3) "mogodb"
redis 对事务的支持目前还比较简单。redis 只能保证一个 client 发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。由于 redis 是单线程来处理所有client 的请求的所以做到这点很容易的,一般情况下 redis 在接受到一个client 发来的命令后,会立刻处理并 返回处理结果,但是当一个client 在一个连接中发出multi命令有,这个链接会进入一个事务上下文,该链接后续的命令并不是立即执行,而是先放到一个对联中,当从此链接受到 exec 命令后,redis 会顺序的执行队列中的所有命令,并将所有命令的运行结果打包到一起返回给 client 然后此链接就结束事务上下文。
开启事务:multi
取消事务:discard
结束事务:exec
127.0.0.1:6379> set age 20OK127.0.0.1:6379> set name wangwuOK127.0.0.1:6379> multiOK127.0.0.1:6379> get ageQUEUED127.0.0.1:6379> get nameQUEUED127.0.0.1:6379> incr ageQUEUED127.0.0.1:6379> exec1) "20"2) "wangwu"3) (integer) 21127.0.0.1:6379> get age"21"127.0.0.1:6379> multiOK127.0.0.1:6379> incr ageQUEUED127.0.0.1:6379> incr nameQUEUED127.0.0.1:6379> exec1) (integer) 222) (error) ERR value is not an integer or out of range127.0.0.1:6379> get age"22"
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似,pub/sub 不仅仅解决发布者和订阅者直接代码级别耦合,也解决两者在物理部署上的耦合。
订阅主题:subscribe
取消主题:unsubscribe
推送:publish
127.0.0.1:6379> subscribe priceReading messages... (press Ctrl-C to quit)1) "subscribe"2) "price"3) (integer) 11) "message"2) "price"3) "aaaa"1) "message"2) "price"3) "bbbb"
127.0.0.1:6379> publish price aaaa(integer) 1127.0.0.1:6379> publish price bbbb(integer) 1
他们之间的配合方式:subscribe *
支持全部订阅,使用 unsubscribe
可以过滤掉部分。
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失,Redis提供了两种持久化方法:RDB(默认)和AOF。
==1)RDB== rdb 是 Redis DataBase 缩写。 RDB 功能核心函数 rdbSave(生成RDB文件)和rdbLoad(从文件加载到本地)两个函数+-------+-------------+-----------+-----------------+-----+-----------+| REDIS | RDB-VERSION | SELECT-DB | KEY-VALUE-PAIRS | EOF | CHECK-SUM |+-------+-------------+-----------+-----------------+-----+-----------+
保存策略:(关于redis.conf相关配置如何介绍,请看《redis.conf详解》)
save 900 1 // 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化) save 300 10 // 300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化) save 60 10000 // 60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)==2)AOF==
Aof 是 Append-only file 缩写----图
每当执行服务器(定时)任务或者函数时,flushAppendOnlyFile 函数都会被调用,这个函数执行以下两个工作。
aof写入保存: WRITE:根据条件,将aof_buf中的缓存写入到AOF文件 SAVE:根据条件,调用fsync或fdatasync函数,将AOF文件保存到磁盘中。 两个步骤都需要根据一定的条件来执行,redis提供了三种条件。保存策略:
模式 | WRITE是否阻塞 | SAVE是否阻塞 | 停机时丢失的数据量 |
---|---|---|---|
AOF_FSYNC_NO 不保存 | 阻塞 | 阻塞 | 操作系统最后一次对 AOF 文件触发 SAVE 操作之后的数据。 |
AOF_FSYNC_EVERYSEC 每一秒钟保存一次 | 阻塞 | 不阻塞 | 一般情况下不超过 2 秒钟的数据 |
AOF_FSYNC_ALWAYS每执行一个命令保存一次 | 阻塞 | 阻塞 | 最多只丢失一个命令的数据。 |
存储结构:
内容是redis同学协议(RESP)格式的命令文本存储。==3)总结==
通常为被复制方(master)主动将数据发送到复制方(slave),复制方接收到数据存储在当前实例,最终目的是为了保证双方的数据一致,同时也是降低了 master 的压力。
Redis 的复制方式有两种,一种是主(master)-从(slave)模式,一种是从(slave)-从(slave)模式。
复制流程图:
1、slave向master发送sync命令。 2、master开启子进程执行bgsave写入rdb文件,同时将子进程接收到的写命令缓存起来。 3、子进程写完,父进程得知,开始将RDB文件发送给slave 4、master 发送完RDB文件,将缓存的命令发送给slave。 5、master 增量的把写命令发送给 slave。主从复制:
[root@wei-BaiDu 7001]# ./redis-cli -h 127.0.0.1 -p 7001127.0.0.1:7001> keys *(empty list or set)127.0.0.1:7001> set key1 aaaaOK
7002 slave
[root@wei-BaiDu 7002]# ./redis-cli -h 127.0.0.1 -p 7002127.0.0.1:7002> keys *(empty list or set)127.0.0.1:7002> get key1"aaaa"127.0.0.1:7002> config get 'slaveof'1) "slaveof"2) "127.0.0.1 7001"
转载地址:http://vpzvl.baihongyu.com/