Redis:REmote DIctionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,高性能的(key-value)分布式内存数据库,基于内存运行并支持持久化的NoSQL服务器,也被人们称作数据结构服务器。
#1
Redis是以单进程模型来处理客户端的请求。对读写事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主线程的执行效率。
Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IOselect/poll的增强版本。它能显著提高程序在大量并发连接中只有少量活跃情况下的系统CPU利用率
#2
默认16个数据库,类似数组下标从0开始,初始默认使用零号库
Select命令切换数据库–select 数字
#3
Dbsize查看当前数据库key的数量
#4
FLUSHDB:清空当前库;
FLUSHALL:通杀全部库
#5
统一密码管理,16个库都是同样的密码,要么都OK要么一个也连接不上
#6
Redis的索引都是从0开始
String是redis最基本的类型,单key单value。String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg或者序列化后的对象。一个redis中字符串value最多可以是512M.
常用:
set key value
del key
append key new_value//改值
strlen key//获得value长度
INCR key//value为数字,自增1
INCRBY key num(要增加的数字)//value为数字
DECR key//value为数字,自减1
DECRBY key num(要减少的数字) //value为数字
getrange/setrange
getrange:获取指定范围内的值
127.0.0.1:6379> set ky "Reyco"
OK
127.0.0.1:6379> get ky
"Reyco"
127.0.0.1:6379> GETRANGE ky 0 -1 //零到负1,即获取全部
"Reyco"
127.0.0.1:6379> GETRANGE ky 0 3
"Reyc"
setrange;设置指定范围内的值,格式是setrange key 具体值
127.0.0.1:6379> SETRANGE ky 1 xxxx
(integer) 5
127.0.0.1:6379> get ky
"Rxxxx"
setex(set with expire)键秒值//创建键,并设置存活时间
setnx(set if not exist)//如果存在,则沿用之前的值
mset(merge 合并)/mget
127.0.0.1:6379> mset key1 11 key2 22 key3 33//批操作
OK
127.0.0.1:6379> mget key1 key2 key3//批操作
1) "11"
2) "22"
3) "33"
Redis Hash是一个键值对集合,是一个String类型的field和value的映射表;Hash特别适合用来存储对象,类似Java中Map的< String , Obejct>
#hset/hget
127.0.0.1:6379> hest user id 11
127.0.0.1:6379> hget user id
"11"
127.0.0.1:6379> hset user name Reyco
(integer) 1
127.0.0.1:6379> hget user name
"Reyco"
#hmset(复合操作)/hmget
127.0.0.1:6379> hmset user address Guangzhou phone 133
OK
127.0.0.1:6379> hmget user address phone
1) "Guangzh"
2) "133"
#hlen 获取value长度
#hexists 判断某个value是否存在
#hkeys/hvals 单独获得key和value
127.0.0.1:6379> HKEYS user
1) "id"
2) "name"
3) "address"
4) "phone"
127.0.0.1:6379> HVALS user
1) "11"
2) "Reyco"
3) "Guangzhou"
4) "133"
Redis列表是简单的字符串列表,按照插入表的顺序。你可以添加一个元素置表的头部或者尾部,底层实际上是链表。
常用:
List命令中有很多L-R区分。简单理解,将一个List从上到下,将上标为LEFT ,将下标为RIGHT。想象下一个List列表逆时针选择,那么上就是LEFT,下就是RIGHT
lpush(l-left) /rpush-(r-right)/ lrange–创建List
127.0.0.1:6379> LPUSH list01 0 1 2 3 4 5
(integer) 6
0.0.1:6379> LRANGE list01 0 -1 //因为是LPUSH创建,所以从左边,也就是从上面开始弹出
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"
lpop/rpop–弹出List栈顶(L-R为方向的不同)
127.0.0.1:6379> LPOP list01
"5"
127.0.0.1:6379> RPOP list01
"0"
lindex 按照索引下标获得元素(从上到下)
127.0.0.1:6379> lindex list01 2
"2"
#llen–List长度
lrem Key 删N个value
127.0.0.1:6379> LPUSH list03 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7
(integer) 16
127.0.0.1:6379> LREM list03 2 1 //删2个'1'
(integer) 2
127.0.0.1:6379> LRANGE list03 0 -1
1) "7"
2) "7"
3) "6"
4) "6"
5) "5"
6) "5"
7) "4"
8) "4"
9) "3"
10) "3"
11) "2"
12) "2"
13) "0"
14) "0"
#ltrim key 开始index 结束index ,截取指定范围的值后再赋给key
127.0.0.1:6379> LRANGE list03 0 -1
1) "7"
2) "7"
3) "6"
4) "6"
5) "5"
6) "5"
7) "4"
8) "4"
9) "3"
10) "3"
11) "2"
12) "2"
13) "0"
14) "0"
127.0.0.1:6379> LTRIM list03 0 4 //截取list03的索引从0到4 再赋给list03
OK
127.0.0.1:6379> LRANGE list03 0 -1
1) "7"
2) "7"
3) "6"
4) "6"
5) "5"
#rpoplpush 源列表 目的列表(移走某个值到另一个List)
127.0.0.1:6379> LRANGE list01 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> LRANGE list02 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
8) "0"
127.0.0.1:6379> RPOPLPUSH list01 list02 //将list01右边的值pop,push进list02的左边
"1"
127.0.0.1:6379> LRANGE list02 0 -1
1) "1" //目标值
2) "7"
3) "6"
4) "5"
5) "4"
6) "3"
7) "2"
8) "1"
9) "0"
#lset key index value//对List下标的某个值赋值
#linsert key before/after 值 1 值2//在值1 前/后 插入值2
List是字符串链表,left,right都可以插入添加。如果键不在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也消失了。链表的操作无论是头和尾效率都很高,但假如是对中间元素进行操作,效率就很惨淡了。
Redis的Set是String类型的无序集合,是通过HashTable实现的。
#sadd-创建
#smembers-查看set
#sismember-查看set中是否存在某个元素
127.0.0.1:6379> sadd set01 1 1 2 2 3 3
.0.0.1:6379> SMEMBERS set01 。。没有重复的元素
1) "1"
2) "2"
3) "3"
#scard-获取集合里面的元素个数
#srem key value 删除集合中的元素
#seandmember key 某个整数(随机出某个数)
#数学集合类
差集:sdiff key1 key2
交集 :sinter key1 key2
并集:sunion key1 key2
127.0.0.1:6379> SMEMBERS set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SRANDMEMBER set01 2 //从set01中随机出两个值
1) "2"
2) "3"
#spop key(随机出栈)
#smove key1 key2 value(在key1里的某个值)–作用:将key1里的某个值赋给key2
Redis的zset和set都是String类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,Redis是通过分数来为集合中的成员进行从小到大的排序。Zset的成员是唯一的,但分数(score)是可以重复的
之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2
#zadd/zrange
127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3
(integer) 3
127.0.0.1:6379> ZRANGE zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
#zrangebyscore key 开始score 结束score //按照score排序
#’ (’-是不包含的意思 两个(可以作为范围
127.0.0.1:6379> ZRANGEBYSCORE zset01 60 (80 //从60开始排序,不包含80
1) "v1"
2) "v2"
127.0.0.1:6379> ZRANGEBYSCORE zset01 (60 (80 //60-80之间,且不包含60和80
1) "v2"
#zrem key 某score下对应的value值 //作用是删除元素
#zcard key //返回key下value个数(score和value为一体)
#zrevrank key valus值 //作用是逆序获得下标值
常用:
Keys *–列举key
exists key的名字,判断某个key是否存在
move key db(库的名称)–当前库就没有了,被移除了
expire key 秒钟–为给定的key设置过期时间
ttl key–查看还要多少秒过期,-1表示永不过期 -2表示已过期
type key 查看你的key是什么类型的