redis基础知识
redis就是一个巨大的HashMap
MySQL并发 写600/s 读2000/s,Redis100K级并发
Redis的版本号第二位偶数为稳定版本,奇数为不稳定
bin目录详解
可执行文件 | 作用 |
---|---|
redis-server | 启动redis |
redis-cli | redis命令行客户端 |
redis-sentinel | 启动哨兵 |
redis-check-aof | AOF持久化文件检测和修复工具 |
redis-check-rdb | RDB持久化文件检测和修复工具 |
redis-bencjmark | 基准测试工具 |
linux启动redis
将redis.conf移动出来
mv redis.conf /mydata/redis-linx/redis/conf
启动
./redis-server ../conf/redis.conf
客户端登录
redis-cli
## 设置密码
方式一:临时生效
```bash
config set requirepass xxxxxx
方式二:永久生效
修改redis.conf配置文件
vim /mydata/redis-linux/conf
requirepass xxxxxx
redis全局命令
查看所有键
keys * -- 产看所有键
支持通配符查询
keys w* -- 遍历所有以w为开头的键
键总数
如果项目中要查询redis中一共有多少个key,keys *这种会全部遍历 算法复杂度为O(n)
可以使用 dbsize命令查询一共有多少键
redis种内置了一个计数器,只要新增一个key就会+1,使用这个命令就是取出count记录的值
检查键是否存在
exists k1 -- 检查键是否存在 0:不存在 1:存在
删除键
del key [key...] -- 删除键 返回的数值为成功删除的个数
支持删除多个键
键过期
expire key seconds -- 给键设置过期时间 单位s
默认set设置的key是永不过期
ttl key -- 查看key的过期时间
-1:永不过期 -2:代表键不存在 0:代表刚好过期
pexpire key seconds -- 设置过期时间为毫秒
expireat key timestamp(时间戳) -- 设置指定时间过期
对已经设置过期时间的key进行set操作,会使过期时间失效变为永久不过期
只能对key做过期时间操作,不能对value中的二级数据做过期时间
数据结构类型
type key -- 查看Value存储的数据类型
重命名
rename key newkey -- 重命名key
set name 111
set name1 222
rename name name1
get name1 -- 111
不想被覆盖可以使用renamenx key1 key2 不存在才会设置
随机返回一个key
randomkey
数据类型:value
String、Hash、List、Set、Zset
String
Redis是标准的C写的,String语言中String类型是char[],Redis并没有直接使用C的String,是自己实现的
setnx key value
存在的时候才能设置
set key value xx
存在的时候才能设置
get key
获取key的value值
mset key1 value1 key2 value2 …
一次设置多个键值对,网络编程中IO是瓶颈,一次批量多个主要是为了解决多次IO的问题
mget key1 key2 …
批量获取多个key的value,一次批量多个主要是为了解决多次IO的问题
incr key
自增1 原子性操作
decr key
自减1 原子性操作
incrby key
自增指定数值
append key value
给指定key追加value 返回value整个的长度
strlen key
返回value的长度
setrange key offset value
在指定位置设置value
getrange key start end
获取指定范围的值 0 -1返回全部
getset key value
返回key的value 并用新值覆盖 作者大概率也是为了节省IO
Hash
hmset key field value [field value …] redis4.0之后已弃用
hmset user1 name xxx age 27 hobby basketball -- 增加hash-key
hset key field value [field value …]
hset user2 name xxx age 27 hobby sleep -- 增加hash-key
hget key field
hget user1 name/age/hobby -- 获取其中一个field的值
eg: heget user1 age -- 27
hmget key field…
hmget user1 name age hobby -- 获取多个field的值
eg: hmget user1 name age -- xx 27
hdel key field…
hdel user1 hobby... -- 删除value值 支持删除多个
hlen key
hlen user1 -- 查看value中有多少个键值对
hkeys key
hvals user1 -- 查询出value中所有hash的key值
hexists key field
hexists user1 name -- 判断value中某一个hash的key是否存在
hgetall key
hgetall user1 -- 获取value中所有的key-value
hincrby key field increment
hincrby user1 age 2 -- 给指定key中value中的hash自增1 如果这个键不存在,会创建新的并从0自增 返回自增后的值
List
list维护一个链表,元素可以重复 可存储2^32-1
rpush key element [element …]
rpush k1 a -- 向k1列表从右插入元素a
rpush k1 b -- 向k1列表从右插入元素b
-- 返回值为列表包含元素的个数
rpush k1 a b c d -- 也可插入多个元素
lpush key element
lpush k1 a- -- 向k1列表从左插入元素a-
lrange key start stop
lrange k1 0 -1 -- 从k1中取出指定下标的元素 0 -1 取出全部
lpop key [count]
lpop user1 -- 从左弹出一个元素 返回并删除
lpop user1 2 -- 也可指定弹出个数元素
lrem key count element
lrem k1 1 b -- 删除列表中指定元素的指定个数 返回值为成功个数
ltrim key start stop
ltrim k1 0 3 -- 截取指定下标区间的元素,不在指定区间的元素都会被删除
lset key index element
lset k1 3 aa -- 替换指定下标的元素
lindex key index
lindex k1 0 -- 获取指定下标的数据
llen key
llen k1 -- 获取数据长度
blpop key [key …] timeout
blpop k1 100 -- 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待时间超时或发现可弹出元素为止
可以当一个小型MQ使用, 也可以当作一个栈(先进先出)
Set
无序、不允许有重复元素,不可用索引下标获取 可存储2^32-1 可做交集、并集、差集
sadd key member [member …]
sadd sk1 a a b c d -- 添加元素 返回值为添加成功的不重复的数据
smembers key
smembers sk1 -- 获取set中的元素
srem key member [member…]
srem sk1 c d -- 删除元素中指定元素 返回删除成功的元素个数
scard key
scard sk1 -- 查key中元素个数
sismember key member
sismember sk1 a -- 判断某个值是否存在
spop key [count]
spop sk1 -- 随机弹出一个元素,也可指定弹出数量
测试数据
sadd k1 a b c d e f
sadd k2 2 5 c d e f
sinter key [key…]
sinter k1 k2 - defc -- 取两个交集
sunion key [key…]
sunion k1 k2 -- 取两个并集
sdiff key [key…]
sdiff k1 k2 -- 取两个差集
sinterstore destination key [key …]
sinterstore k3 k1 k2 -- 取k1 k2的交集并存入k3
Zset
zadd key score member [sorce member …]
zadd k1 100 xxx 99 yyy -- 将一个或多个member元素及其score值加入到有序集key当中
**zrange key min max **
zrange k1 0 -1 -- 返回有序集key中,下标在min max之间的元素
zrevrank key member
zrevrank k1 xxx -- 反转
zrem key member
zrem k1 xxx -- 删除某个member
基本数据类型图示
文章和代码后续高级数据类型更新补充…