Redis主要支持的数据类型有5种:String ,Hash ,List ,Set ,和 Sorted Set。
一:String
1.set key value [EX n](过期时间) [NX](key 已存在则不覆盖) 插入数据(key已存在,默认覆盖)
2.get key 获取数据
3.append key "string" 追加数据
4.del key 删除数据
5.getset key newValue 先获取原有值,再设置新值
6.incrby key n(n为数字) 数据加加法运算 incr key 为加一
7.decrby key n 数据减法运算 decr key 为减一
8.strlen key 获取str长度,key或value不存在返回0
9.setex key second(时间) value 设值,并指定过期时间
10.setnx key value 插入数据,存在则不执行操作,并返回0;不存在则插入数据,并返回1
11.setarrange key index value 从指定位置开始替换
12.getrange key startIndex end 截取字符串,end等于-1时返回整个字符串
13.mget key [key2 key3 ...] 批量读取
14.mset key value [key2 value2...] 批量修改
15.msetnx key value [key2 value2] 批量修改,当有key已存在时,所有插入不执行
二:List
List类型数据结构为链表。支持分页查询,排序;可以对List进行监听(blpop\brpop\blpoprpush)
1.rpush listKey value [value2 value3...] 向key为listKey的List中从右侧插入数据
2.lpush listKey value [value2 value3...] 向key为listKey的List中从左侧插入数据
3.linsert listKey BEFORE|AFTER pivot value 在key为listKey的List中查找值为pivot的数据,在其前|后插入一条值为value的数据
4.lrange listKey start stop 查看list数据,start开始位置、stop结束位置
5.lpop listKey 从list左侧移除一条数据并返回
6.rpop listKey 从list右侧移除一条数据并返回
7.llen listKey 查看list长度
8.lindex listKey index 获取给定位置数据
9.lset listKey index value 修改制定索引位置的值
10.rpoplpush A B 将A中尾元素添加到B的头元素中
11.blpop\brpop listKey time 从list左\右边移除一个数据,若list为空,则等待list中插入数据为止,等待时间为time秒,如果time设置为0表示一直阻塞,直到list中有数据阻塞结束
12.brpoplpush A B time 将A中尾元素添加到B的头元素中,若A为空,则阻塞,等待时间为time秒,如果time设置为0表示一直阻塞,直到list中有数据阻塞结束
三:Set
Set数据结构为哈希表,无重复数据。
1.sadd mySet member 向key为mySet的Set中添加成员member
2.smembers mySet 获取set中全部元素
3.sismember mySet value 判断mySet中是否存在value,是1否0
4.srem member1 [member2...] 删除元素,返回删除个数
5.scard mySet 查看mySet中元素数量
6.srandmember mySet 随机获取一个mySet中的元素
7.spop 随机删除一个元素并返回
8.smove mySet mySet2 member 将mySet中member元素移动到mySet2中
9.sinter mySet mySet2 [mySet3...] 求交集
10.sunion mySet mySet2 [mySet3...] 求并集
11sdiff mySet mySet2 [mySet3...] 求差集
四:Hash
Hash是一个field和value的映射表,一个key可以对应多个field,一个field对应一个value。适合存储对象。
1.hset|hsetnx myHash field value 向myHash中添加一堆映射field,value。若field存在则覆盖原有值。(hsetnx 若field存在则取消操作)
2.hget myHash key 读取myHash中key对应的value
3.hlen myHash 获取myHash中的field数量
4.hexits myHash field 判断myHash中是否存在field,是1否0
5.hdel myHash field [field2...] 删除myHash中的field字段
6.hincrby myHash field n myHash中field字段的value加n(负数为减)
7.hmset myHash field1 value1 [field2 value2...] 批量插入
8.hmget myHash field [field2...] 批量获取
9.hgetall myHash 获取myHash中所有键值对
10.hkeys myHash 获取myHash中所有field
11.hvals myHash 获取myHash中所有values
五:Zset
Zset类型与Set类型一样不能有重复数据,但Zset是有序的,每个成员都有一个“分数”与之对应。
1.zadd myzset score member [score2 member2...] 向myzset中添加分数为score的member
2.zcard myzset 查看myzset中的成员个数
3.zrange myzset start stop [withscores] 查看制定范围内的成员,withssores为输出结果带分数
4.zrank myzset member 获取myzset中member的下标位置,不存在则返回null
5.zcount myzset min max 获取分数从min到max的成员个数
6.zrem myzset member [member2...] 删除成员
7.zscore myzset member 获取指定成员的分数
8.zincrby myzset n member 将member的分数加n
9.zrangebyscore myzset min max 获取分数从min到max的members
10.zremrangebyscore myzset min max 删除分数从min到max的成员
11.zremrangebyrank myzset start stop 删除下标从start到stop的成员
12.zrevrange myzset start stop 倒叙排序数据,输出
13.revrangebyscore myzset max min [withscores][limit offset count] 按分数倒序输出
14.zunionstore Cset n Aset Bset[Dset...] 将Aset、Bset的并集添加到Cset中(n为集合数)
15.zinterstore Cset n Aset Bset[Dset...] 将Aset、Bset的交集添加到Cset中(n为集合数)
六:Key操作
1.del key [key2...] 输出key
2.exists key 判断key是否存在,是1否0
3.move key db 将key移动到指定数据库
4.rename key newkey 重命名,若newkey已存在则覆盖原值
5.expire key seconds 设置过期时间(相对于当前时间)
6.expireat key seconds 设置过期时间(相对于1970/1/1)
7.ttl key 返回过期时间,当key不存在时(包括已过期的key)返回-2,永久不过期的返回-1
8.persist key 清楚key的过期时间,使其持久化
9.randomkey 随机返回一个key
10.type key 返回key对应的数据类型
七:事务操作
需要注意的是,redis的事务中,如果是一条命令语法出错,则事务中所有命令都不执行;如果是运行时错误,redis无法发现,其他命令照常执行。
1.multi 开启事务
2.exec 执行事务
3.discard 回滚事务
4.watch key[key2...] 监控key,如果被监控的key在事务之前发生修改,且紧接着的一个事务中包含该key,则该事务将被回滚。(紧邻的事务执行过后,监控自动取消)
5.unwatch key 取消监控
其他:
1.flushdb 清楚当前数据库的全部数据
2.select db 切换当前数据库
redis中为了将数据分类存储,可以开启多个redis服务,也可以选择将数据存在不同的数据库中。redis是支持多数据库的,且数据库由一个整数索引标识,可以在配置文件中控制数据库的数量
databases num ,num为数据库数量。默认值16,且默认连接到的数据库所以为0。八:启动停止
1.redis-server [配置文件路径(可选,默认为根目录下redis.conf)] 启动redis服务
2.redis-cli shutdown 停止redis服务
3.redis-cli [-p 6379] 打开客户端
4.脚本方式启动
九:配置文件
1.port 6379 监听端口
2.logfile "/home/root/logs/redis.log" 日志文件
3.dir /home/root/data/redisData 持久化文件存放位置
4.daemonize no 是否默认后台运行
5.save 900 1 900秒后至少有一个key被更改则快照保存到硬盘
save 300 10
save 60 10000
三个save为“或”的关系,如果不想持久化则删除所有save即可。
Redis快照实现过程:(快照方式即为RDB)
- Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
- 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件;
- 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。
6.appendonly yes AOF方式的持久化
7.appendfilename appendonly.aof 配置aof文件名
8.appendfsync always/everysec/no 设置同步方式,每次写入、每秒、每30秒
十:备份与还原
自动,RDB方式与AOF方式对比:
RDB:启动时redis直接将RDB文件中的数据载入内存,速度很快,且不必时刻向硬盘写数据,但是一旦redis发生异常退出,则上一次快照之后的数据都将丢失。
AOF:每执行一条更改都会将该命令写入硬盘中的AOF文件,启动时redis会逐个执行AOF文件中的命令来将数据加载到内存。速度较慢,但是不会丢失数据。
手动:
save/bgsave 发送命令对当前数据库进行快照。
save由主进程进行快照,会阻塞其他请求;
bgsave会fork子进程进行快照,即后台执行。
还原只需将备份文件拷贝到数据目录,启动服务
十一:启动脚本:utils/redis_init_script