redis简介
部分基本概念
Redis:Remote Dictionary Server(远程字典服务器)
Redis的特点:
- 使用c语言开发
- 短小精悍,整个Redis一共只有5w行代码,核心代码只有2w行,性能强劲
- 基于内存
- 单线程(一次只能执行一条命令),多路IO复用(读写速度快)
- NoSQL,没有模式,所有数据都是K-V存储,K—> String, V---> 8中类型,常用的有5大类型
安装
-
上传
-
解压缩
-
添加gcc环境(C语言编写)
- 法一:yum install -y gcc-c++
- 插入光盘,依次执行
- rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm
- rpm -ivh cpp-4.4.7-17.el6.x86_64.rpm
- rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm
- rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
- rpm -ivh gcc-4.4.7-17.el6.x86_64.rpm
- 检查是否成功
- rpm –qa | grep gcc
-
编译,执行make命令
-
在没有安装gcc环境下,如果执行了make,不会成功!安装环境后,第二次make有可能报错:
Jemalloc/jemalloc.h:没有那个文件
-
解决: 运行
make distclean之后再make
-
-
执行make insatll 【PREIX=路径】
这步会产生一个文件,后面的可选就是选择文件产生后的路径,默认好像是在/usr/local
-
将产生的bin目录加入到环境变量中
-
【后续的是避免占用客户端,使其在后台运行】
-
修改redis.conf文件的bind(改成自己需要的,具体可以看文件中的示例)和daemonize(no改yes),保存退出。建议使用服务器的把端口号也改一下,不然会被黑掉
-
启动后查看服务netstat –anp|grep 6379
启动指令redis-server redis.conf
配置文件看自己的
客户端登录
命令 | 说明 | 举例 | 备注 |
---|---|---|---|
redis-cli | 启动客户端 | redis-cli –p 端口号 连接指定的端口号 | 直接执行的话,默认端口号就是6379; |
ping | 测试联通 | 回复pong代表联通 | |
exit | 退出客户端 | ||
redis-cli shutdown | 停止服务器 | redis-cli -h 127.0.0.1 -p 6379 shutdown 停止指定ip指定端口号的服务器 | redis是通过客户端发送停止服务器的命令 |
redis操作
数据库操作
命令 | 说明 | 举例 | 备注 |
---|---|---|---|
select |
切换数据库 | select 1:切换到1号库 | 开启redis服务后,一共有16(0-15)个库,默认在0号库 |
flushdb | 清空当前库 | ||
dbsize | 查看数据库数据个数 | ||
flushall | 通杀全部库 |
key操作
表达式 | 描述 |
---|---|
KEYS pattern | 查询符合指定表达式的所有key,支持*,?等 |
TYPE key | 查看key对应值的类型 |
EXISTS key | 指定的key是否存在,0代表不存在,dr |
DEL key | 删除指定key |
RANDOMKEY | 在现有的KEY中随机返回一个 |
EXPIRE key seconds | 为键值设置过期时间,单位是秒,过期后key会被redis移除 |
TTL key | 查看key还有多少秒过期,-1表示永不过期,-2表示已过期 |
RENAME key newkey | 重命名一个key,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖 |
RENAMENX key newkey | 只有在NEWKEY不存在时能够执行成功,否则失败 |
value操作
**Redis中的数据以键值对(key-value)为基本存储方式,其中key都是字符串,这里探讨数据类型都是探讨value的类型。**
key | value | value描述 |
---|---|---|
string | 字符串 | |
list | 可以重复的集合 | |
set | 不可以重复的集合 | |
hash | 类似于Map<String,String> | |
zset(sorted set) | 带分数的set |
string操作
指令 | 描述 |
---|---|
SET key value | 添加键值对 |
GET key | 查询指定key的值 |
APPEND key value | 将给定的value追加到原值的末尾 |
STRLEN key | 获取值的长度 |
SETNX key value | 只有在 key 不存在时设置 key 的值 |
INCR key | 指定key的值自增1,只对数字有效 |
DECR key | 指定key的值自减1,只对数字有效 |
INCRBY key num | 自增num |
DECRBY key num | 自减num |
MSET key1 value1 key2 value2… | 同时设置多个key-value对 |
MGET key1 key2 | 同时获取一个或多个value |
MSETNX key1 value1 key2 value2 | 当key不存在时,设置多个key-value对 |
GETRANGE key起始索引 结束索引 | 获取指定范围的值,都是闭区间 |
SETRANGE key起始索引 value | 从起始位置开始覆写指定的值 |
GETSET key value | 以新换旧,同时获取旧值 |
SETEX key 过期时间 value | 设置键值的同时,设置过期时间,单位秒 |
特点
- 一个字符串最大容量为512M
list操作
指令 | 操作 |
---|---|
LPUSH/RPUSH key value1 value2… | 从左边/右边压入一个或多个值 头尾效率高,中间效率低 |
LPOP/RPOP key | 从左边/右边弹出一个值 值在键在,值光键亡 弹出=返回+删除 |
LRANGE key start stop | 查看指定区间的元素 正着数:0,1,2,3,... 倒着数:-1,-2,-3,... |
LINDEX key index | 按照索引下标获取元素(从左到右) |
LLEN key | 获取列表长度 |
LINSERT key BEFORE|AFTER value newvalue | 在指定value的前后插入newvalue |
LREM key n value | 从左边删除n个value |
LSET key index value | 把指定索引位置的元素替换为另一个值 |
LTRIM key start stop | 仅保留指定区间的数据 |
RPOPLPUSH list1 list2 | 从list1右边弹出一个值,左侧压入到list2 |
特点:
- 双向链表,可以从两端进行数据的插入(仅在redis中)
- 遍历时,从左往右进行遍历取值
- 弹栈和压栈时可以从两端
- 操作中间节点时性能较差
set操作
指令 | 描述 |
---|---|
SADD key member [member ...] | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 |
SMEMBERS key | 取出该集合的所有值(不会删除set中的元素) |
SISMEMBER key value | 判断集合 |
SCARD key | 返回集合中元素的数量 |
SREM key member [member ...] | 从集合中删除元素 |
SPOP key [count] | 从集合中随机弹出count个数量的元素,count不指定就弹出1个 |
SRANDMEMBER key [count] | 从集合中随机返回count个数量的元素,count不指定就返回1个 |
SINTER key [key ...] | 将指定的集合进行“交集”操作 |
SINTERSTORE dest key [key ...] | 取交集,另存为一个set |
SUNION key [key ...] | 将指定的集合执行“并集”操作 |
SUNIONSTORE dest key [key ...] | 取并集,另存为set |
SDIFF key [key ...] | 将指定的集合执行“差集”操作… |
SDIFFSTORE dest key [key ...] | 取差集,另存为set |
特点
- 无序,不可重复
hash操作
指令 | 描述 |
---|---|
HSET key field value | 为key中的field赋值value |
HMSET key field value [field value ...] | 为指定key批量设置field-value |
HSETNX key field value | 当指定key的field不存在时,设置其value |
HGETALL key | 获取指定key的所有信息(field和value) |
HKEYS key | 获取指定key的所有field |
HVALS key | 获取指定key的所有value |
HLEN key | 指定key的field个数 |
HGET key field | 从key中根据field取出value |
HMGET key field [field ...] | 为指定key获取多个filed的值 |
HEXISTS key field | 指定key是否有field |
HINCRBY key field increment | 为指定key的field加上增量increment |
特点
- 类似json格式,一级目录下还可以跟一个目录,或者说map结构中(key,(key1,value1),(key2,value2)…)
zset操作
指令 | 描述 |
---|---|
ZADD key [score member ...] | 添加 |
ZSCORE key member | 返回指定值的分数 |
ZRANGE key start stop [WITHSCORES] | 返回指定区间的值,可选择是否一起返回scores |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 在分数的指定区间内返回数据,从小到大排列,最大最小值都是分数,即score |
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 在分数的指定区间内返回数据,从大到小排列, 最大最小值都是分数,即score |
ZCARD key | 返回集合中所有的元素的数量 |
ZCOUNT key min max | 统计分数区间内的元素个数 |
ZREM key member | 删除该集合下,指定值的元素 |
ZRANK key member | 返回该值在集合中的排名,从0开始 |
ZINCRBY key increment member | 为元素的score加上增量,increment是需要增加的数据大小(通俗点讲就是加多少) |
特点
- 有序,不重复,和set有点不同
- 其有序的原因是,其在存储时多存储了一个score信息,该信息可以重复,但其他信息不可重复。有序也是按照score进行排序