1.redis是一种速度非常快的非关系型数据库,它可以存储键(key)与5钟不同类型的值(value)之间的映射,可以将存储在内存中的键值对数据持久化到硬盘中。
2.redis是一个Key-Value存储系统
- string(字符串)
- list(链表)
- set(集合)
- zset(有序集合)
他们都支持push/pop add/remove及交集,并集,差集及一些其他的丰富操作(原子操作),在此基础上,redis还支持各种排序,实现主(master)从(salve)同步
3.CAP原则(定理)(要么CA,要么CP,要么AP,不存在CAP)。指的是在一个分布式系统中,Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)三者不可兼得
- C:在分布式系统中的所有数据备份,在同一时刻是否同样的值。
- A:在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求
- P:分区,以实际效果而言,相当于对通信的时间做出要求。系统如果不能在时限内达成数据的一致性,就以为着发生了分区,必须就当前操作做出A和C之间的选择
3.启动redis(进入redis目录,启动服务器,启动客户端)
(1)现启动服务器,进入redis目录,使用src/redis-server启动服务器(不推荐这种方式)
推荐方式:src/redis-server redis.conf --deamonize yes
(2)再启动客户端src/redis-cli --raw(解决中文值的问题)
(3)control+c停止客户端实例
(4)客户端停止服务器redis-cli shutdown,或者服务端使用control+c
4.简单操作redis
- 插入数据:set name
- 查询数据:get name
- 删除键值 :del name
- 验证键是否存在:exists name
5.String类型及操作(最简单的类型)
- setnx name:设置键值前判断是否键已存在
- setex haircolor 10 red:添加haircolor=red,并设置时限10秒
- setrange name 3 hello:把name的值从第3个字符后开始全部替换
- mset key1 10 key2 20:一次可以设置多个键值对(要么都设置,要么都没设置)
- msetnx:设置多个键值之前判断键是否存在
- getset name uu:设置name的值并返回name的旧值
- getrange name 0 6:获取name的第0到第6的子字符串,如果从右面开始数,那么从-1开始,从右往左一次递减
- mget:一次获得多个键的值
- incr:对key的值做加操作(只能对int)
- incrby age 5:设定一次加几
- decr:减操作
- decrby:指定减的值
- append name @126.com:给指定的key追加值
- strlen name:取出key的value的长度
6.hashes类型及操作(适合存储对象,存储在hash类型中比string类型更省内存,并且更方便,原因是新建一个hash对象,先存储在zipmap(small hash),超出内存,再换成hash)
- hash结构:表名 字段名 值
- hset myhash field1 hello:设值
- hsetnx:设值判断存在与否
- hmset:一次设置多个字段
- hget:取值
- hmget:一次取多个值
- hincrby:给指定的hash field加上指定的值
- hexists:判断存在与否
- hlen myhash:看表有几个字段
- hdel:删除
- hkeys myhash:看表里的所有字段
- hvals myhash:看表里的所有值
- hgetall myhash:得到表的全部hash
7.lists类型及操作(链表(既可以用作栈,又可以用做队列。原因:push(添加)和pop(删除)可以从头部和尾部添加删除元素,l是左,r是右),主要功能:push,pop)(其实就是每一个子元素都是string的双向链表)
- lpush mylist world:从头部添加元素
- lrange mylist 0 -1:从头到尾展示mylist
- rpush mylist hello:从尾部添加元素
- linsert mylist before world hlj:在world前添加hlj
- lset myliist 0 ok:在零的位置上替换为ok
- lrem mylist 2 hello:从mylist中删除2个hello
- ltrim mylist 1 -1:保留从1开始的所有数据(没有括号是闭区间,有括号是开区间)
- lpop mylist:从头部删除元素
- rpop:从尾删
- rpoplpush:从第一个list的尾部删除元素,并添加到第二个list的头部(原子操作)
- lindex mylst 0:返回mylist的第0个元素
- len:长度
8.sets类型及操作(擅长添加删除查找,没有键只有值,所以值不允许重复)
- sadd myset hello:添加元素
- smembers myset:取出所有值
- srem:删除
- spop:删除,弹栈,所以不用指定
- sdiff myset myset1:差集
- sdiffstore myset3 myset myset1:将差集存为myset3
- sinter:交集
- sinterstore:交集存起来
- sunion:并集
- sunionstore:并集存起来
- smove myset3 myset4 1:将1从myset3移除到myset4
- scard myset:返回myset元素的个数
- sismember myset2 two:myset2中是否存在two
- srandmember:随机返回set的一个元素
9.sorted sets类型及操作(set的升级版本,增加了一个顺序属性(在添加修改元素的时可以指定))(可以理解为带id的一个mysql数据库)
- zadd myzset 1(scores) one(值):添加
- zrange myzset 0 -1 withscores:用scores排序
- zrem myzset two:删除(连带scores一起)
- zincrby myzset 2 one:对one的scores加2
- zrank myzset two:返回two在myzset中的排名(从零开始,按scores排序)
- zrevrank myzset two:返回two在myzset中的排名(按scores从大到小排序)
- zrevrange myzset:按scores从大到小排序
- zrangebyscore myzset (2 3 withscores:返回符合条件2<scores<=3的成员
- zcount myzset 2 3:返回集合中scores在给定区间的数量
- zcard myzset:返回集合中元素的个数
- zscore myzset two:返回给定元素对应的score
- zremrangebyrank myzset 3 3:删除集合中排名在给定区间的元素
10.redis常用命令
- keys *:返回数据库中所有的键
- keys mylist*:取出所有以mylist开头的键
- exists,del,
- expire name 10:设置name过期的时间10秒,用ttl name查看剩余的时间
- select 0:操作0号数据库,一共16个数据库(号到15)
- move mylist 15:移除mylist到数据库15
- persist age:移除给定age的过期时间
- randomkey:返回当前数据库的随机的一个key
- rename age age_new:重命名key
- type mylist:返回值的类型
- ping:测试连接接是否联通
- echo honkong:打印honkong
- quit:退出连接
- dbsize:看当前数据库的已用容量,即返回当前数据库中的key的数目
- info:获取服务器的信息和统计
- monitor:实时打印出redis服务器接收到的命令,调试用
- config get dir:获取服务器配置信息
- flushdb:删除当前选择数据库中的所有key
- flushall:删除所有数据库