1.Redis的介绍
1.1 Remote Dictionary Server (远程字典服务器)
Redis是一个使用ANSIC语言编写的遵守BSD协议的开源的noSLQ数据库,是一个高性能的(key:value)分布式内训数据库.
1.2 三个特点
- 支持数据持久化,可将内存中的数据保存在磁盘中,下次启动的时候可再次使用
- 除了key-value类型之外还支持多种数据类型(list,set,hash,zset,zset)
- 支持master-slave主从赋值的数据的数据备份
2. Linux环境下的Redis的安装
2.1 环境依赖
redis的安装需要GCC编译器,我是用的而是DeepinLinux发行版,内置了GCC,所以直接解压缩redis安装包就好了,没有安装
GCC编译器的需要先安装GCC编译器,这里给出参考链接Linux安装GCC编译器.
2.2 测试安装&简单操作
安装好之后,已因为实在linux环境下,为了保证出错之后的可恢复性,所以原始文件一般拷贝一份用作使用.
1. 使用cp [源文件] [目标文件]
将安装好的目录下的redis.conf放在指定的目录下我这里路径是/home/bart/myredis.
2. 修该redis.conf
的中general中的no修改为yes
3. 查看后台进程看redis是否存在后台ps -ef | grep redis
lsof -i 6379
产看端口使用情况.
4. 赋值的redis.conf
文件放在/home/bart/myredis
目录下,切换到该目录,输入’redis-server redis.conf’启动redis服务,
5. 启动redis服务之后,链接客户端redis-cli -p 6379
回车即可
6. 进入环境输入 ping
如果返回的是’PONG’表示链接成功.
7. 若想要退出redis环境,shutdown
退出,然后exit
退出.
8. 可以使用redis-benchmark
测试本机安装redis的性能表现.(可选操作)
9. redis默认支持16个仓库,默认是第0个,使用select [num]
选择使用哪个库,num范围[0,15]
10. dbsize
:查看当前库中有多少个key;keys *
:列出所有的key;keys k?
:使用通配符形式列出所有的k开头的key
11. (!!!慎用)flushdb
:清空当前库,flushall
:清空所有库.
3. Redis的五大数据类型
Redis支持五大数据类型,包括String(字符串),List(列表),Hash(哈希类似Java中的Map),
Set(集合),Zset(Sorted Set有序集合)
3.1 String类型
3.1.1 简介
①String 是redis最基本的数据类型,于MemberCache一样单key单value
②String是二进制安全的,意味着String可以包含任何数据源,例如图片或者序列化对象
③String的value最多支持512MB的大小.
3.1.2 常用操作
set [key] [value]
:设置key:valueget [key]
:得到key对饮的value值del [key]
:删除指定key及其值append [key] [value]
: 向已经有值的key对追加valuestrlen [key]
: 返回key对应的value的长度incr/decr [key]
: 指定的key的value增加/减少 1,前提是key对应的value必须是数字类型.incrby/decrby [key] [num]
:指定的key的value增加/减少num,前提是key对应的value必须是数字类型.getrange/setrange [key] [索引]/[value]
:批量设置和得值- 例如: 假如k1的值是:123456 ,
getrange k1 0 3
:返回0~3索引的值:1234.
setrange k1 0 xxx
: k1的值为:xxx456
- 例如: 假如k1的值是:123456 ,
setex [key] [second] [value]
: 设置key值为value存活时间为second秒;
10setnx [key] [value]
: 当被设值的key不存在的时候该代码才生效.mset [k1] [v1] [k2] [v2] ...
: 批量设值mget [k1] [k2] [k3] ...
:批量返回值msetnx [k1] [v1] [k2] [v2] ...
: 当所有被批量设值的key都不存在的时候才会成功.getset [key] [value]
:先得到的值再设置key的值.
3.2 List类型
3.2.1 简介
是简单的字符串列表,按照插入顺序排列,底层是一个双向链表.
3.2.2 常用操作
lpush [k1] [v1 v2 v3 ...]
:相当于压入堆栈,从左到右先进后出.rpush [k1] [v1 v2 v3 ...]
: 相当于队列,先进先出.lrange [k1] 0 -1
: 返回k1对应的list的所有元素.- ‘lpop/rpop [k1]’:取出栈顶的值/取出栈底的值.
llen [k1]
: 返回 k1 对应的list的长度.lrem [k1] [n] [v1 v2 ... ]
: 删除 n 个 k1对应的list中的 v1,v2元素,n为0的时候表示删除所有v1,v2的值.lindex [k1] [idx]
: 得到指定索引位置的值,索引从0开始.ltrim [k1] [start] [end]
: 截取k1对应的list的[start,end]的值.rpoplpush [k1] [k2]
: 表示从k1的栈底取一个值压入到k2的在栈顶.lset [k1] [idx] [v1]
:将v1插入到指定索引idx处linsert [k1] befor/after [v1] [v2]
: 表示将 v1 之前/之后插入 v2 .
3.3 Set类型
3.3.1 简介
是一个String类型的无序集合,通过HashTable实现.
3.3.2 常用操作
sadd [k1] [v1,v2,v3, ... ]
:将元素[v1,v2,v3, … ]添加到set集合中.smembers [k1]
: 列出所有的k1对应的set集合元素.sismember [k1] [x]
: 判断 [x] 是否在k1对应的set集合中,有返回1,否则返回0.scard [k1]
:返回k1对应的set集合的元素的个数.srem [k1] [x]
:将元素x从set集合中移除.srandmember [k1] [num]
:从k1对应的set集合中取出num个随机数
- num为正数:获得num个随机数不重复.
- num为负数:获得num个随机书可能会重复.spop [k1]
:随机从k1对应的set集合中取出一个元素.smove [k1] [k2] [x]
:将k1中的x取出来放在k2中.- 数学集合运算
sdiff [k1] [k2]
:返回在k1中但是不在k2中的元素.sinter [k1] [k2]
:返回k1和k2中都有的元素.sunion [k1] [k2]
:返回k1和k2的并集.
3.4 Hash类型
3.4.1 简介
Redis中的Hash是一个键值对集合,是一个String类型的field和value组成的映射表.适合存储对象.
类似Java中的HashMap
3.4.2 常用操作
hset [k1] [k11] [v11]
:给K1对应的Hash的k11字段赋值
- 例:
hset student id 1006
:表示给student的id赋值为1006
- 例:
hget [k1] [k11]
:得到k1对应的k11字段的值
- 例:
hget student id
:返回1006
- 例:
hmset [k1] [k11] [v11] [k12] [v12] ....
:批量赋值.
- 例:
hmset student id 1006 name bart age 16
:给student的id,name,age分别赋值1006,bart,16.
- 例:
hmget [k1] [k11] [k12] [k13] ...
:批量获得指定的k1对应的k11,k12,k13对应的值.
- 例:
hmget student id name age
:返回 1006,bart,16.
- 例:
hgetall [k1]
:得到k1对应的集合的所有属性及其值.
- 例:
hgetall student
:返回id,name,age的值.
- 例:
hlen [k1]
:返回k1中的字段的数量.hexists [k1] [k11]
:判断k11字段是否在k1中,有则返回1否则返回0.hkeys [k1]
:返回k1中所有的字段名.hvals [k1]
: 返回k1中所有的value值.hincrby [k1] [k11] [num]
: 使k1对应的k11字段的value值自增num个(前提value必须是数字).hincrbyfloat [k1] [k11] [num]
: 递增为float类型的小数.hsetnx [k1] [k11] [v11]
:如果k1中的k11字段不存在,就给k11赋值v11.
3.5 ZSet类型
3.5.1 简介
带顺序的Set集合,实际上在每个元素后加上了一个score.的那是score不算一个单独的元素,他依附于元素而存在.
3.5.2 常用操作
zadd [k1] [s1 v1 s2 v2 s3 v3 ... ]
: 添加value并设置对应的分数值.
- 例:
zadd zset01 100 v1 90 v2 80 v3 70 v4 60 v5
:表示添加了v1,v2,v3,v4,v5元素对应的分数是:100,90,80,790,60.
- 例:
zrange [k1] 0 -1
: 返回不带score(分数)的value.zrange [k1] 0 -1 withscores
: 返回带score的value.zrangebyscore [k1] [startScore] [endScore]
:返回所有的[startScore,endScore]的元素.zrangebyscore [k1] [startScore] [endScore] withscores
:同上,不过是返回带分数的元素.zrangebyscore [k1] ([startScore] [endScore]
: 注意”(“表示不等于,返回(startScore,endScore]的元素.zrangebyscore [k1] [startScore] [endScore] limit [startIndx] [endIndex]
:返回所有的[startScore,endScore]的元素中的指定索引区间[startIndx,endIndex]的元素zrem [k1] [score]
: 删除score对应的key的值,可以是多个key.
- 例:
zrem zset01 v1 100
:表示删除分数为100 的v1的及其元素.
- 例:
zcard [k1]
: 获得元素个数.zrank [k1] [v1]
: 获得 v1 在 k1 中的索引位置.zcount [k1] [startScore] [endScore]
:返回[startScore,endScore]区间的元素.zscore [k1] [v1]
:获得k1集合中的v1的分数值.zrevrank [k1] [v1]
:逆序返回k1集合中V1的索引位置.zrevrange [k1] 0 -1
: 逆序返回k1中的所有能元素.zrevrangebyscore [k1] [startScore] [endScore]
:逆序返回[startScore,endScore]区间的元素.