redis基础操作
1.redis特点
redis:基于键值对的非关系型数据库,工作在内存中,一个键值对容量是512M,官方给定读11W次/s,写8W次/s,除了作为数据库以外,还常用于部署缓存服务器和消息列队
- 特点:
1.速度快,性能好
2.基于键值对的非关系型数据库,又叫远程字典服务
3.功能丰富(基于数据库类型实现)
4.支持多种客户端语言,c,c++,php,python,java等
5.支持数据的持久化
6.支持主从复制
7.支持分布式
8.支持哨兵 - redis的数据类型
字符串数据类型:string
列表数据类型:list
集合数据类型:set
有序集合类型:zset
哈希数据类型:hash
Redis数据库的数量是固定的,并在配置文件中设置。默认情况下,你有16个数据库。每个数据库都由一个数字(而不是名称)来标识。
2.数据库基本操作
切换连接到数据库(redis默认的数据库数量为16个,编号0-15)
127.0.0.1:6379> select 15
OK
127.0.0.1:6379[15]> select 14
OK
创建字符串数据类型的键值对,没有则创建,有则修改
#语法 set key value
127.0.0.1:6379[14]> set li lishuang
OK
查看已经创建的键值对
127.0.0.1:6379[14]> keys *
1) "li"
查看键值对是否存在
127.0.0.1:6379[14]> keys li
1) "li"
查语法看查看指定的键值对中的值
##语法 get key
127.0.0.1:6379[14]> get li
"lishuang"
统计已创建的键值对的数量
##语法 dbsize
127.0.0.1:6379[14]> dbsize
(integer) 1
判断指定的键值对是否存在,如果存在返回1,不存在返回0,如果指定多个键值对,返回的是存在的键值对的个数
语法 exists key [key ...]
127.0.0.1:6379[14]> exists li
(integer) 1
设置键值对的过期时间
语法 expire key seconds
127.0.0.1:6379[14]> expire wang 10
(integer) 1
查询过期时间,如果没有对键值对设置过期时间返回-1,已经过期返回-2,如果没有过期则返回剩余时间
127.0.0.1:6379[14]> ttl wang
(integer) -2
批量创建键值对
语法 mset key value [key value ...]
127.0.0.1:6379[14]> mset one 111 two 222 six 666
OK
127.0.0.1:6379[14]> keys *
1) "two"
2) "one"
3) "li"
4) "six"
批量查看键值对
语法 mset key1 value1 key2 value2
127.0.0.1:6379[14]> mget one two six
1) "111"
2) "222"
3) "666"
计数(自增)
语法 incr key #自增+1 incrby key n #指定添加多少
127.0.0.1:6379[14]> incr one
(integer) 112
127.0.0.1:6379[14]> incrby one 100
(integer) 212
计数(自减)
语法 decr key #自减-1 decrby key n #指定减多少
127.0.0.1:6379[14]> decr one
(integer) 211
127.0.0.1:6379[14]> decrby one 100
(integer) 111
以浮点数进行计算
语法 incrbyfloat key n ##n为正数是加,负数是减
127.0.0.1:6379[14]> incrbyfloat one -0.1
"110.9"
127.0.0.1:6379[14]> incrbyfloat one +0.1
"111"
追加值
append key value
append sll hahaha
计算字节长度
strlen key
strlen sll
获取部分字符
getrange key start end #0表示开始字符,-1表示结束字符
getrange sll 0 -1
查看指定键值对的类型
type key
type sll
查看建的内部编码
object encoding key
object encoding sll
内部编码:对数据类型的详细划分
string的内部编码:raw int embstr
raw:键值对的数据类型为string,且值的字符个数大于等于44
embstr:键值对的数据类型为string,且字符个数小于等于44
int:键值对的数据类型为string,且值为整数
列表数据类型:每个列表键值对用来存储多个有序的字符串,一个列表中最大可以储存2^32-1个元素,列表中元素是由顺序的,可以通过索引下标获取某个元素或者某个范围内的列表,列表中的元素是可以重复的
创建一个列表或对列表进行追加数据:
#在指定元素前或后添加新元素,如果指定的元素存在多个,则按照元素顺序
在匹配到的第一个指定元素后面添加新元素
linsert mylist after 3 lala 之后
linsert mylist 3 before lala 之前
查看指定范围的元素,0代表开头,-1待定结尾
lrange key start end
lrange mylist 0 -1
查看列表中指定索引下标的元素
lindex key index
lindex mylistn 2
获取列表长度
llen key
llen mylistn
左删除/左弹出
lpop key
lpop mylistn
右删除
rpop key
rpop mylistn
删除指定元素
lrem key count value #删除列表中指定的值value,count表示删除的个数以及
顺序,为正数表示从左往右,为负数表示从右往左
lrem mylistn 1 lala
阻塞式弹出:blpop,brpop
blpop key timeout #如果指定的键不存在或列表元素空,则会出现阻塞状态
阻塞时间为timeout指定时间,如果timeout为0则一直阻塞
blpop new 5
list类型的内部编码:ziplist linkedlist quicklist
ziplist:压缩列表,当列表元素个数小于list-max-ziplist-entries的配置
默认(512)个,同时所有元素的大小都小于list-max-ziplist-value的配置
默认(64字节),redis使用ziplist作为列表数据类型的内部编码
linkedlist:不满足ziplist时使用
quicklist:集合ziplist和linkedlist的特点
集合数据类型:用来存储多个元素,集合中不允许有重复的元素,并且集合
中的元素时无序的,一个集合中最多允许有2^32-1,集合可以求交,并,差集
创建一个集合
sadd key value
sadd myset a b c a b c
查看集合中的元素
smembers key
smembers myset
计算集合中元素的个数
scard key
scard myset
删除元素
srem key value
srem myset a
判断元素是否在集合中
sismember key value
sismember myset a
随机从集合中返回指定个数的元素
srandmember key [count]
srandmember myset 3
随机删除集合中的元素并弹出
spop key [count]
spop myset
spop myset 2
求集合之间的交集,并集,差集
sadd ming_friend a b c d e f
sadd hong_friend a b d g i p
求小明和小红朋友的交集
sinter key1 key2
sinter ming_friend hong_friend
求小明和小红朋友的总和(并集)
sunion key1 key2
sunion ming_friend hong_friend
求是小明但不是小红的朋友(小明与小红的差集)
sdiff key1 key2
sdiff ming_friend hong_friend
对交集,并集,差集的结果进行保存
sinterstore d_set key1 key2
sinterstore mhj ming_friend hong_friend
sunionstore d_set key1 key2
sunionstore mhb ming_friend hong_friend
sdiffstore d_set key1 key2
sdiffstore mhc ming_friend hong_friend
内部编码
inset:集合中的元素都是整数,并且元素的个数小于set-max-insert-entries
(默认512)
hashtable:不满足inset
有序集合数据类型:在集合的基础之上,给集合中的每个元素添加分数,实现
对元素进行排序,分数必须是数值,不同元素的分数可以是重复的
创建有序集合
zadd key score1 value score2 value …
zadd music 10 xinyang 15 xiashan 20 shangshan
查看有序集合中的元素
zrange key start end [withscore]
zrange music 0 -1 withscores
计算有序集合中的元素的个数
zcard key
zcard music
查看指定元素的分数
zscore key value
zscore music xinyang
查看某个元素的排名
zrank key value
zrank music xinyang
zrevrank key value #降序
zrevrank music xiashan
删除指定的元素
zrem key value value2
zrem music xiashan
增加某个元素的分数
zincrby key increment value
zincrby music 5 xiashan
zincrby music 3 xinyang
对集合中的元素进行排序
zrange key start end [withscore] #升序
zrange music 0 -1 withscores
zrevrange key start end [withscore] #降序
zrevrange music 2 4 withscores
查看指定分数范围的成员
zrangebyscore key min max withscores #从小到大排序
zrangebyscore music 15 20 withscores
zrevrangebyscore key max min withscores #从大到小排序
zrevrangebyscore music 23 20 withscores
计算指定分数范围中元素的个数
zcount key min max
zcount music 15 23
删除指定范围内的元素
zremrangebyrank key start stop
zremrangebyrank music 0 1
求有序集合的交集和并集
zinterstore d_set key_nms key1 key2....
zinterstore one_two_j 2 one two
zunionstore d_set key_nums key1 key2....
zunionstore one_two_b 2 one two
内部编码
ziplist:有序集合元素个数小于zset-max-ziplist-entries(默认128个)
同时每个元素的值小于zset-max-ziplist-values(默认64字节)
skiplist:不满足ziplist
#哈希数据表类型:存储字段和值的映射,一个哈希键值对可以包含2^32-1个字段
创建哈希键值对中所有字段的值
hset key field values
hset user1 name peiqi
hset user1 passwd 123.com
hset user1 home home.xmj
查看哈希键值对中所有字段的值
hvals key
hvals user1
查看哈希键值对中指定字段的值
hget key field
hget user1 name
批量添加哈希键值对的字段
hmset key field1 value field2 value
hmset user2 name xmj passwd 123 home beijing
批量查询
hmget key field1 field2 field3
hmget user2 name passwd
计算哈希键值对中字段的个数
hlen key
hlen user1
删除哈希键值对中指定的字段
hdel key field
hdel user1 name
判断哈希键值对中是否有这个字段
hexists key field
hexists user1 name
获取哈希键值对中所有的字段名
hkeys key
hkeys user1
获取哈希键值对中所有字段及值
hgetall key
hgetall user1
计算哈希键值对中指定字段的字节大小
hstrlen key field
hstrlen user1 passwd
计算哈希键值对中字段的值
hincrbyfloat key fireld x #x可以为正也可以为负,可以为整也可以是浮点数
hincrbyfloat vedio bo_num 100
hincrbyfloat vedio zan_num -1
#常用指令
#常用指令
对键进行重命名
rename key newkey
rename old new
随机返回一个键
randmkey
迁移键
move key db
move new 4
dump+restore实现redis节点之间的数据备份与还原
备份节点
dump key
获得十六进制序列
还原节点
restore key ttl 十六进制序列 #ttl为键值对的过期时间,0表示不过期
rpush,lpush,linsert
rpush key value1 value2 value3
rpush mylist a b c
lpush key value1 value2 value3
lpush mylist1 1 2 3
linsert key after |before pivot value
#在指定元素前或后添加新元素,如果指定的元素存在多个,则按照元素顺序
在匹配到的第一个指定元素后面添加新元素
linsert mylist after 3 lala 之后
linsert mylist before 3 lala 之前
查看指定范围的元素,0代表开头,-1待定结尾
lrange key start end
lrange mylist 0 -1
查看列表中指定索引下标的元素
lindex key index
lindex mylistn 2
获取列表长度
llen key
llen mylistn
左删除/左弹出
lpop key
lpop mylistn
右删除
rpop key
rpop mylistn
删除指定元素
lrem key count value #删除列表中指定的值value,count表示删除的个数以及
顺序,为正数表示从左往右,为负数表示从右往左
lrem mylistn 1 lala
阻塞式弹出:blpop,brpop
blpop key timeout #如果指定的键不存在或列表元素空,则会出现阻塞状态
阻塞时间为timeout指定时间,如果timeout为0则一直阻塞
blpop new 5
list类型的内部编码:ziplist linkedlist quicklist
ziplist:压缩列表,当列表元素个数小于list-max-ziplist-entries的配置
默认(512)个,同时所有元素的大小都小于list-max-ziplist-value的配置
默认(64字节),redis使用ziplist作为列表数据类型的内部编码
linkedlist:不满足ziplist时使用
quicklist:集合ziplist和linkedlist的特点
集合数据类型:用来存储多个元素,集合中不允许有重复的元素,并且集合
中的元素时无序的,一个集合中最多允许有2^32-1,集合可以求交,并,差集
创建一个集合
sadd key value
sadd myset a b c a b c
查看集合中的元素
smembers key
smembers myset
计算集合中元素的个数
scard key
scard myset
删除元素
srem key value
srem myset a
判断元素是否在集合中
sismember key value
sismember myset a
随机从集合中返回指定个数的元素
srandmember key [count]
srandmember myset 3
随机删除集合中的元素并弹出
spop key [count]
spop myset
spop myset 2
求集合之间的交集,并集,差集
sadd ming_friend a b c d e f
sadd hong_friend a b d g i p
求小明和小红朋友的交集
sinter key1 key2
sinter ming_friend hong_friend
求小明和小红朋友的总和(并集)
sunion key1 key2
sunion ming_friend hong_friend
求是小明但不是小红的朋友(小明与小红的差集)
sdiff key1 key2
sdiff ming_friend hong_friend
对交集,并集,差集的结果进行保存
sinterstore d_set key1 key2
sinterstore mhj ming_friend hong_friend
sunionstore d_set key1 key2
sunionstore mhb ming_friend hong_friend
sdiffstore d_set key1 key2
sdiffstore mhc ming_friend hong_frien
d
内部编码
inset:集合中的元素都是整数,并且元素的个数小于set-max-insert-entries
(默认512)
hashtable:不满足inset
有序集合数据类型:在集合的基础之上,给集合中的每个元素添加分数,实现
对元素进行排序,分数必须是数值,不同元素的分数可以是重复的
创建有序集合
zadd key score1 value score2 value .....
zadd music 10 xinyang 15 xiashan 20 shangshan
查看有序集合中的元素
zrange key start end [withscore]
zrange music 0 -1 withscores
计算有序集合中的元素的个数
zcard key
zcard music
查看指定元素的分数
zscore key value
zscore music xinyang
查看某个元素的排名
zrank key value
zrank music xinyang
zrevrank key value #降序
zrevrank music xiashan
删除指定的元素
zrem key value value2
zrem music xiashan
增加某个元素的分数
zincrby key increment value
zincrby music 5 xiashan
zincrby music 3 xinyang
对集合中的元素进行排序
zrange key start end [withscore] #升序
zrange music 0 -1 withscores
zrevrange key start end [withscore] #降序
zrevrange music 2 4 withscores
查看指定分数范围的成员
zrangebyscore key min max withscores #从小到大排序
zrangebyscore music 15 20 withscores
zrevrangebyscore key max min withscores #从大到小排序
zrevrangebyscore music 23 20 withscores
计算指定分数范围中元素的个数
zcount key min max
zcount music 15 23
删除指定范围内的元素
zremrangebyrank key start stop
zremrangebyrank music 0 1
求有序集合的交集和并集
zinterstore d_set key_nms key1 key2....
zinterstore one_two_j 2 one two
zunionstore d_set key_nums key1 key2....
zunionstore one_two_b 2 one two
内部编码
ziplist:有序集合元素个数小于zset-max-ziplist-entries(默认128个)
同时每个元素的值小于zset-max-ziplist-values(默认64字节)
skiplist:不满足ziplist
#哈希数据表类型:存储字段和值的映射,一个哈希键值对可以包含2^32-1个字段
创建哈希键值对中所有字段的值
hset key field values
hset user1 name peiqi
hset user1 passwd 123.com
hset user1 home home.xmj
查看哈希键值对中所有字段的值
hvals key
hvals user1
查看哈希键值对中指定字段的值
hget key field
hget user1 name
批量添加哈希键值对的字段
hmset key field1 value field2 value
hmset user2 name xmj passwd 123 home beijing
批量查询
hmget key field1 field2 field3
hmget user2 name passwd
计算哈希键值对中字段的个数
hlen key
hlen user1
删除哈希键值对中指定的字段
hdel key field
hdel user1 name
判断哈希键值对中是否有这个字段
hexists key field
hexists user1 name
获取哈希键值对中所有的字段名
hkeys key
hkeys user1
获取哈希键值对中所有字段及值
hgetall key
hgetall user1
计算哈希键值对中指定字段的字节大小
hstrlen key field
hstrlen user1 passwd
计算哈希键值对中字段的值
hincrbyfloat key fireld x #x可以为正也可以为负,可以为整也可以是浮点数
hincrbyfloat vedio bo_num 100
hincrbyfloat vedio zan_num -1
#常用指令
对键进行重命名
rename key newkey
rename old new
随机返回一个键
randmkey
迁移键
move key db
move new 4