redis-命令
切换数据库
默认有16个数据库0-15,切换数据库使用select
1 | select 15 |
删除与保存
flushall
:删除所有数据
save
:保存,上一条命令的结果即刻同步数据到硬盘
bgsave
:和save一样的作用,不同点在于save是停止当前所有的写操作,先进行备份同步,而bgsave是可以一边写一边保存
这两个命令和sql中的提交commit作用一样,会立即生效即同步数据到硬盘
key键
key命令:适用于所有的数据类型的命令
keys *
查看所有的key ——————————–> keys命令支持正则匹配
exists key
是否存在key,存在返回1,否则返回0
expire key time
设置key的过期时间,单位秒
pexpire key time
设置key的过期时间,单位毫秒
persist key
撤销过期设置
ttl key
查看过期时间time to live,-1为永不过期,-2为已近销毁
pttl key
查看过期时间,单位毫秒
del key
删除key
rename key newkey
重命名key
move key dbindex
将key移到其它数据库(默认16个:0-15)
randomkey
随机返回一个key
type key
查看key对应值的存储类型
key命名规范
单个key支持最大512M
每个key都是唯一的
key区分大小写
key使用统一的命名格式,使用冒号分隔,用来区分数据以及分类
1
2
3
4
5eg:
school:student:1
school:student:2
school:teacher:1
school:teacher:2每个key都做到了唯一,而且易于区分,加快查询速度,比如要查询所有的老师信息
1
keys school:teacher*
value数据类型
redis支持五种不同的数据类型:
- string:用来存放字符串
- list:value为list的有序集合,存储list集合,当值被清空后,键也不复存在了。不存在空的list
- set:无序不重复数据,与list一样为集合,只不过不允许list中出现重复的数据,而且数据无序
- zset:有序不重复数据,与set类似,不过是有序的集合。通过给每个元素添加一个score,来判断顺序,元素不可重复,但是score可以重复
- hash:其value为hash的key-value键值对,适合用来存储对象,这也是最接近sql的一种数据类型,如果比作sql的话就像将字段与值对应起来的关系
string
最大同样可以存储512M
赋值
set key value
:key唯一,后面的重复key会覆盖前面的
1 | set school:user:1 lanzhan |
setnx key value
:表示set if not exist,当没有出现过的key才赋值,这样比较安全,推荐使用
1 | setnx school:user:1 zhansan |
setex key time value
:表示set expire,赋值的同时设置过期时间,time单位为秒
1 | setex school:user:2 libai |
setrange key offset value
:从偏移offset开始覆盖指定key的value值,偏移值从0开始计数
1 | 127.0.0.1:6379> set school:user:3 libai |
mset key1 value1 key2 value2....
:同时设置一个或多个 key-value 对
1 | mset user1 libai user2 hanxing user3 gonsunli |
msetnx key1 value1 key2 value2....
:如果不存在就赋值if not exists,同理
如果其中一个已经存在,那么整条命令都不会执行
取值
get key
:获取指定key的值
getrange key start end
:获取key中字符串的子字符串,范围取值
1 | 127.0.0.1:6379> set school:user:baijuyi 12345678 |
mget key1 key2 ...
:获取所有(一个或多个)给定 key 的值
1 | mget user1 user2 user3 |
数字递增/减
将value为数字的这种进行增加或减少,目前来看它的作用在于统计数字
incr key
:递增1
decr key
:递减1
incrby key num
:递增num个
decrby key num
:递减num个
list
赋值
lpush key member1 member2 member3
:按照顺序将这个list插入数据库,将一个或多个值插入到列表头部
1 | lpush user1 1 2 3 4 5 |
rpush key member1 member2 member3
:在列表中添加一个或多个值,尾部
1 | rpush user2 1 2 3 4 5 |
增加
linsert key before/after pivot member
:在某个pivot元素前/后插入数据
1 | 127.0.0.1:6379> lrange user1 0 -1 |
取值
lrange key start end
:查看列表指定范围内的元素
1 | 127.0.0.1:6379> lrange user1 0 2 |
lrange key 0 -1
:查看整条数据
1 | 127.0.0.1:6379> lrange user1 0 -1 |
1 | 127.0.0.1:6379> lrange user2 0 -1 |
需要注意lpush与rpush的顺序不同,lpush相当于从栈的底部传入数据,最先传入的数据最后到了栈顶
lrange并不属于栈的操作,所以只是简单的将这个list从左到右的显示出来
lindex key index
:通过索引获取列表中的元素
1 | 127.0.0.1:6379> lrange user1 0 -1 |
删除
lpop key
:这个不同于lrange,它属于栈操作,会将数据取出来,并且删除。从栈底取数据
1 | 127.0.0.1:6379> lpop user1 |
rpop key
:栈顶取数据
1 | 127.0.0.1:6379> rpop user1 |
lrem key count member
:删除count个value值
1 | 127.0.0.1:6379> rpush user3 1 2 2 3 3 3 |
ltrim key start_index end_index
:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
1 | 127.0.0.1:6379> rpush user4 1 2 3 4 5 6 |
rpoplpush source destination
:移出source的栈顶元素,并加入到destination的栈底
1 | 127.0.0.1:6379> rpush user1 1 2 3 4 |
列表长度
llen key
:获取列表长度
1 | 127.0.0.1:6379> lrange user2 0 -1 |
set
增加
sadd key member1 member2 member3
:value不允许重复,如果有重复则会自动去掉多余的重复数据。在给之前存在的key添加值时,如果出现重复数据也会自动忽略这些重复数据,只添加不重复的那些数据
1 | 127.0.0.1:6379> sadd user1 1 2 2 3 3 3 |
取值
smembers key
:查看key的value值
1 | smembers user1 |
srandmember key num
:从集合中随机去num个元素
1 | 127.0.0.1:6379> smembers user1 |
判断
sinmember key member
:判断某个元素value是否属于key,存在返回1,否则返回0
1 | 127.0.0.1:6379> smembers user1 |
删除
srem key member
:删除集合中指定的元素
1 | 127.0.0.1:6379> smembers user1 |
spop key
:与list的pop操作不同,这里的pop是随机删除一个元素
1 | spop user1 |
移动
smove key1 key2 member
:将key1中的value移到key2中
1 | 127.0.0.1:6379> sadd user1 1 2 3 |
集合长度
scard key
:获取集合元素个数
1 | 127.0.0.1:6379> scard user1 |
集合运算
会自动去重
sdiff key1 key2
:差集,key1 差 key2
sinter key1 key2
:交集, key1 交 key2
sunion key1 key2
:并集,key1 并 key2
zset
增加、更新
zadd key score1 member1 score2 member2
:向有序集合添加一个或多个成员,或者更新已存在成员的分数
1 | zadd user3 10 a 20 b 20 c 40 d |
查看
zrange key index_start index_end
:查看范围内的元素
1 | 127.0.0.1:6379> zrange user3 0 -1 |
zrevrange key index_start index_end
:查看范围内的元素,倒序
1 | 127.0.0.1:6379> zrevrange user3 0 -1 |
zrange key index_start index_end withscores
:查看范围内的元素,以及成员分数
1 | 127.0.0.1:6379> zrange user3 0 -1 withscores |
zrangebyscore key min_score max_score limit index count
:查看分数范围内的成员(可选用limit来再次筛选),score为闭合区间
1 | 127.0.0.1:6379> zrangebyscore user3 20 40 |
如果要不闭合使用(
1 | 127.0.0.1:6379> zrangebyscore user3 (20 40 |
zrevrangebyscore key max_score min_score limit index count
:先倒叙再查看分数范围内的成员(可选用limit来再次筛选),score为闭合区间
zrank key member
:查看元素的index
1 | 127.0.0.1:6379> zrange user3 0 -1 |
zrevrank key member
:先倒序,再查看其索引
zscore key score
:查看元素对应的score
1 | 127.0.0.1:6379> zrange user3 0 -1 withscores |
删除
zrem key member
:删除指定memeber元素,连同score一起删除
1 | zrem user3 d |
长度
zcard key
:计算集合长度,不包含score
1 | 127.0.0.1:6379> zcard user3 |
zcount key min_score max_score
:计算指定分数内的成员数
1 | 127.0.0.1:6379> zrangebyscore user3 20 40 |
hash
增加、更新
由于field也为key关键字,所以也不能重复,重复会覆盖
hset key field value
:一个一个的赋值
hsetnx key field value
:不存在的话再赋值if not exists
hmset key field1 value1 field2 value2...
:可一次进行多个赋值,更加实用
1 | hmset user10 id 1 name libai age 18 |
hincrby key field num
:对整数的value进行num个数的增加
1 | 127.0.0.1:6379> hget user10 id |
hincrfloat key field num
:对浮点数进行num个数的增加
取值
hget key filed
:一个一个的取值
hmget key field1 field2....
:可一次取多个值
1 | hmget user10 id name age |
hgetall key
:一次获取所有键值对
1 | hgetall user10 |
hkeys key
:查看所有的field
hvals key
:查看所有的value
删除
hdel key field1 field2
:删除hash中的指定键值对
del key
:删除所有键值对
判断
hexists key field
:判断是否有此field的键值对
长度
hlen key
:查看键值对的个数
总结
学了这些数据类型之后发现redis真的可以替代oracle,mysql这些,因为它可以存储它们所能存储的数据,而且更好。
我觉得使用的最多的是hash,其次是string,然后是list,至于set和zset使用的应该比较少吧
不过我还是有些不懂的,前面所学的都是针对一条记录来操作的,那么sql中那些复杂的查询语句,在redis中如何才能查询到结果呢,总不能用循环来一条一条的查吧,有没有对多列数据的操作命令呢?