Redis
一、数据结构
Redis
支持五种数据类型:string
(字符串),hash
(哈希),list
(列表),set
(集合)及zset
(sorted set:有序集合)。
1、操作String(字符串)数据常用命令
set username john //设置username的值为john
get username //获取username的值,返回值为john
自增操作
set age 18
incr age //对age进行加1操作
incrby age 5 //对age进行加5操作
自减操作
decr age //对age进行减1操作
decrby age 3 //对age进行减3操作
2、hash(哈希)数据常用命令
hash数据结构是String类型的key--value的键值的map
设置一个值
hset myhash username lili //在myhash中存入username的值为lili
设置多个值
hmset myhash age 20 sex man //在myhash中存入多个值,设置age为20,设置sex为man
获取一个值
hget myhash username //从myhash中获取username的值,返回值为lili
获取多个值
hmget myhash username age //从myhash中获取username以及age的值,返回值为lili和20
获取所有的key和value
hgetall myhash //依次返回key和value
获取所有的key
hkeys myhash //返回所有的key
获取所有的key对应的value
hvals myhash //返回当前myhash中所有key对应的value值列表
获取myhash的长度
hlen myhash //返回myhash的长度,这里存了三个key和value键值对,返回值为3
删除key的value
hdel myhash username //删除myhash中key为username的value,返回值为1
删除多个key和value
hdel myhash age sex //删除myhash的age和sex的value,返回值为2,表示两个操作成功
删除hash
del myhash //返回值为1表示删除myhash成功,返回值为0表示没有当前hash数据
假如这里还没有删除age的值,这里对age进行自增操作
hincr myhash age //对age的值进行加1操作
hincrby myhash age 5 //对age的值加5操作
判断key和value是否存在
hexists myhash age //返回值为1,表示存在
hexists myhash password //返回值为0,表示不存在这样的key,因为本身就没设置password
3、list数据结构
//添加数据到list数据结构中
lpush mylist 1 2 3 //添加1 2 3到mylist中
rpush mylist a b c //添加a b c到mylist中
两者区别:lpush是向最前面添加,rpush向最后面添加,因此,mylist的数据最后结果是3 2 1 a b c
注意:假设一下操作没有改变原有mylist数据结构,既每一个操作之后,mylist数据恢复原样3 2 1 a b c
//从list中弹出数据
lpop mylist //从mylist中弹出一个数据
rpop mylist //从mylist中弹出一个数据
两者区别:lpop从mylist最前面弹出,既索引为0的元素,rpop从mylist中最末尾弹出一个数据,既索引为5
修改指定索引位置的元素的值
lset mylist 2 hello //修改索引为2的元素的值为hello
从一个list中弹出一个数据加入到另一个list中的操作
lpush mylist1 5 6 7
lpoprpush mylist mylist1 //从mylist中弹出索引为0的元素加入到mylist1的末尾位置,操作完成后mylist结果为2 1 1 b c ,mylist1的结果为7 6 5 3
返回制定区间元素
lrange mylist1 0 -1 //返回的是mylist1中所有的元素
lrange mylist1 1 2 //返回的是索引从1到2的区间所有元素
根据参数 count 的值,移除列表中与参数 value 相等的元素。
语句为:lrem list count value
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
lrem mylist 1(count) 3(value) //移除列表中1个value值为3的,从表头开始搜索
lrem mylist -1 3 //移除列表中1个value值为3的,从表末尾开始搜索
lrem mylist 0 3 //移除列表中所有value值为3的元素
向列表中某一个元素前或者后插入一个新元素
linsert mylist before 3 8 //在列表中第一个3前面插入一个8
linsert mylist after 3 8 //在列表中第一个3后面插入一个8
注意:linsert命令只会在列表的第一个指定元素前后者后插入新元素,如果有重复元素,后面的元素前或者后不会插入指定元素,只对第一个指定元素有效
4、set数据结构
set数据结构和list不同,不能存入重复元素,既元素不重复
添加元素
sadd myset 1 2 3 a b c //向myset中存入1 2 3 a b c 六个元素
查看集合中所有元素值
smembers myset //返回所有值的列表,分别是1 2 3 a b c
删除集合中指定的一个或多个元素
删除一个元素
srem myset 2 //删除集合中的2
srem myset a b //删除集合中的a和b两个元素
判断元素是不是集合中的元素
sismember myset 1 //判断成员1是不是myset中的元素,如果是返回1,如果不是返回0
以下对两个集合进行操作
sadd mya1 a b c d 1 2 3
sadd mya2 b 2
sadd mya3 a 1 2
1)两个集合的差集
sdiff mya1 mya2 //mya1和mya2的差集,以前面一个集合为准,返回的结果为a c d 1 3
sdiff mya1 mya3 //mya1和mya3的差集,返回的结果为b c d 3
2)两个集合的交集
sinter mya1 mya2 //mya1和mya2的交集,返回的结果是b 2
sinter mya2 mya3 //mya2和mya3的交集,返回的结果是2
3)两个集合的并集
sunion mya2 mya3 //mya2和mya3的并集,返回结果是a b 1 2
返回集合中元素的基数(元素数量)
scard mya1 //返回的是6,表示集合mya1的元素数量是6个
随机返回集合的一个元素
srandmember mya1 //随机返回mya1中的一个元素,对集合mya1不做任何改动
随机返回多个元素
srandmember mya1 count
这里
1)如果count大于0且count小于集合的基数,则随机返回count个不重复的元素
2)如果count大于等于集合基数,则返回整个集合
3)如果count为负数,则随机返回count绝对值个元素,且元素可重复
srandmember mya1 3 //随机返回三个不重复的元素
srandmember mya1 8 //count的值大于等于集合基数,直接返回整个集合mya1
srandmember mya1 -4 //返回四个元素,这四个元素中的元素可重复
srandmember mya1 -10 //随机返回10个元素,元素可以重复
将连个集合的差集保存在指定集合里,如果指定集合中存在key,则覆盖
sdiffstore mysets mya1 mya2 //将mya1和mya2的差集保存在mysets中,mysets的结果为a c d 1 3
将两个集合的交集保存在指定集合中如果指定集合中存在key,则覆盖
sinterstore mysets2 mya1 mya2 //将mya1和mya2的交集保存在mysets2中,mysest2的结果为b 2
连个集合的并集保存字指定集合中,如果指定集合中存在key则覆盖
sunionstore mysets3 mya2 mya3 //将mya2和mya3的并集保存在mysets3中,mysets3的结果为a b 1 2
5、Sorted-set数据结构
Sorted-set和set的区别是,set无序的,不重复的,Sorted-set是有序的,不重复的
添加一个元素
语法:zadd key score member
zadd mysort 100 zs
添加多个元素
zadd mysort 90 ls 95 ww
返回score和member列表,分数由低到高
zrange myscore 0 -1 withscores //返回的是分数从低到高的member和score列表
返回score和member列表,分数由高到低
zrevrange myscore 0 -1 withscores //返回的是分数从高到低的member和score列表
范围查询member
zrange myscore 0 -1 //查询所有成员member,由分数从低到高排序
返回当前成员个数
zcard myscore //这里有三个成员,返回值为3
删除3个成员,从分数最低的开始
zremrangebyrank myscore 0 3
删除分数在90到95之间的成员,包括90和95分的
zremrangebyscore myscore 90 95
返回分数在0-100之间的所有成员,包括0和100,按分数由低到高排序
zrangebyscore myscore 0 100
返回分数在0-100之间的所有成员和分数,包括0和100,按分数和成员由低到高排序
zrangebyscore myscore 0 100 wirhscores
返回分数在0-100之间的所有成员和分数,从分数最低的开始,取两个,分数包括0和100,按分数和成员由低到高排序,
zrangebyscore myscore 0 100 wirhscores limit 0 2 //limit相当远mysql中的limit,前面一个数字代表偏移量,从第几个开始,0表示从分数最低的开始取,后面一个表示区间,表示取两个
给定成员加指定分数
zincrby myscore 10 ls //给ls分数加10
获取指定成员分数
zscore myscore ls //查询ls的分数
指定分数区间成员数量
zcount myscore 80 100 //80-100分之间的成员数量
二、Keys通用操作
匹配数据库中所有的key
keys *
删除key
del key1 key2 keye key... //删除多个指定key,返回值为成功删除key的个数
重命名
rename key newname //将key进行重命名操作,如果newname存在,则将其值覆盖
renamenx key newname //如果newname不存在返回1,如果存在返回0,
获得以my开头的key
keys my* //通配多个任意字符
keys my? //通配单个任意字符
通配括号内的某一个字符
keys pas[adfsopq]word //比如password,pasaword,pasfword
返回随机key
randomkey
判断key是否存在
exists key //存在返回1,不存在返回0
查询key的类型
type key //返回值有string,hash,set,list
设置key的生命周期
pexpire key times //单位是毫秒值
expire key times //单位是秒
查看key的生命周期
ttl key //返回的是秒值
pttl key //返回声明周期,单位是毫秒
设置key永久有效
persist key //设置成功返回1
选择第n个数据库
select n //选择第n个数据库,redis默认打开16个数据库,编号从0-15,可在配置文件里修改,默认使用的是0号数据库
移动key到指定数据库
move key n //将key移动到第n个数据库