redis 默认有16个库,编号从0开始,0~15;
统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上;
redis的索引都是从0开始的;
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1、key关键字
keys * #查看当前库所有key
FLUSHDB #删除当前库的所有key
FLUSHALL #删除所有库的所有key
DBSIZE #查看多少个key
EXIST k1 #判断k1是否存在
move k1 2 #移动k1至2号库 (当前库就没了)
ttl k1 #查看k1存活时间, -1:永久有效;-2:已过期(过期相当于删除,不在redis内存中了)
DEL k1 #删除k1(相当于已过期)
type k1 #查看k1的数据类型
set k1 lbh # 赋值,如果k1里已存在值,再次设置会自动覆盖原有值
2、String类型
String是redis最基本的类型, 一个key对应一个value。 string类型是二进制安全的。意思是redis的string可以包含任何数据, 一个键最大能存储512MB。
1、append #追加字符串(k1 原值为lbh)
append k1 123 #结果为6, k1的值为 lbh123
2、strlen k1 #结果为6, 查看k1的长度
3、incr k2 #k2的值必须为数字,否则报错,递增值1
incrby k2 3 #k2值递增3, 自己设定递增长度值
#decr 与 decrby 递减同理
4、范围内取设值
getrange k1 0 -1 #取范围,(0 -1:取全部;0 3:取第0个字符到第3个字符)
setrange k1 0 xxx #在第0个位置添加xxx, 设定在哪个位置加什么数值
5、setex k3 10 v3 #设置k3的生存时间是10秒,值为v3
setnx k4 v4 #如果存在v4返回0,不存在返回1
6、mset k1 v1 k2 v2 k3 v3 k4 v4 #同时进行多值赋值
mget k1 k2 k3 k4 #取出多值
7、msetnx k4 v4 k5 v5 # k4、k5如果都不存在返回1,说明设值成功,如果有一项存在返回0,说明设值失败
mget k4 k5 #取出多值
get k4 #取出单值
3、List 类型
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
1、 lpush list01 1 2 3 4 5 #创建集合list01 并添加元素 1 2 3 4 5
rpush list02 1 2 3 4 5 #创建集合list02 并添加元素 5 4 3 2 1
2、 lrange list01 0 -1 #获取list01 集合里的数据
3、 lpop list01 #获取集合list01顶层元素 1
rpop list02 #获取集合list02底层元素 1
4、lindex list01 3 #获取集合list01第三号位的元素
5、rpoplpush list01 list02 #将list01的顶层元素移入list02的顶层下标上
6、lset list01 1 x #将集合下标为1的元素值改为 x
7、linsert list01 before x java #在值为 x 的前面插入元素java
linsert list01 after x oracle #在值为 x 的后面插入元素oracle
性能总结:
它是一个字符串链表,left、right 都可以插入添加:
如果键不存在,则创建新的链表;
如果值全移除,对应的键也就消失了;
链表的操作无论是头和尾效率都很高,但是假如对中间元素进行操作,效率有点底下。
4、Set类型
Redis的Set是string类型的无序、不重复集合。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
1、sadd set01 1 2 3 4 5 1 2 3 #创建集合set01, 并添加元素 1 2 3 4 5 (自动去重)
2、smembers set01 #查看set01 里的数据
scard set01 # 查看个数
3、srem set01 3 #移除集合里值为 3 的数据
4、srandmember set01 3 #随机输出3个数据
5、spop set01 #随机出栈
6、smove set01 set02 5 #将set01里的5 移动到set02里
7、sdiff set01 set02 # set01 在 set02 中的差集
sinter set01 set02 # set01 和 set02 的交集
sunion set01 set02 # set01 和 set02 的并集
5、Hash类型
Hash 关键字是以 key value (key value) value 也是以键值对的形式存在的。
1、hset user id 201201036 #创建一个对象 user 属性为 id, 值为 201201036
hget user id #获取 user 对象的 id 的属性值
2、hmset account id 11 name lbh age 23 addr jinan #创建account对象,添加属性id name age addr,值分别为:11 lbh 23 jinan
hmget account id name age addr
3、hgetall account #获取account 对象的属性和值
4、hdel user id # 删除 user 的属性 id
5、hlen user #获取对象user的个数
6、hexists user #判断对象user是否存在
7、hkeys user #获取对象user的key的数据
hvals user #获取对象user的value的数据
8、hincrby user id #user 对象的 id属性 字加 1
hincrbyfloat account score 0.5 #account 对象的score属性自加 0.5
9、hsetnx account email abc@163.com # 如果不存在email属性 则返回 1,否则存在 返回 0
6、Zset (sored set) 集合
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2
1、zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 #创建集合zset01 60 v1 ...
2、zrange zset01 0 -1 #查看所有值: v1 v2 v3 v4 v5
zrange zset01 0 -1 withscores #查看所有值包括 score 值
3、zrangebyscore zset01 60 90 #查看score值范围在 60 到 90 之间的值
zrangebyscore zset01 60 (90 #查看score值范围在 60 到 90 之间的值(不包含90)
zrangebyscore zset01 60 90 limit 2 2 #查看score值范围在 60 到 90 之间从第二个截取2个值
4、zrem zset01 v5 #移除v5的值
5、zcard zset01 #统计值的数量
6、zcount zset01 60 80 #统计60 到 80 之间的个数
zrank zset01 v4 #查看v4的下标
zscore zset01 v5 #查看v4的值
7、zrevrank zset01 v4 #逆序后查看v4的值
zrevrange zset01 0 -1 #逆序查看范围
zrevrangebyscore zset01 90 60 #逆序查看score 值的范围