redis细节
1、redis启动服务的细节
直接使用./redis-server方式启动,使用的是redis-server这个shell脚本中默认配置。如果想要改配置文件,需要在源码目录中复制redis-conf配置文件到安装目录,启动时:./redis-server ../redis-conf
2、redis中库的概念
database用来存放数据的基本单元,可以放key-value键值对。每一个库都有一个唯一编号,从0开始,默认库的个数为16,库与库之间是隔离的,默认使用0号库,可以在配置文件中配置。使用select index进行切换,比如select 1
redis客户端显示中文,需要启动时加 redis-cli --raw
3、redis中清除库的指令
- flushDB 清空当前库
- flushall 清空所有库
常见redis命令
- keys pattern 查找所有符合给定模式的key,比如*匹配任意多个,?匹配1个,[]匹配[]中的任意一个
- del key [key...] 删除给定的一个或多个key,不存在的key会被忽略,返回被删除key的数量
- exists key [key...] 检查给定key是否存在,存在返回1,否则返回0,多个时只要有一个存在就返回1
- expire key seconds 设置过期时间,默认永久存储,时间为秒
- move key db 把key移动到指定的库
- pexpire key milliseconds和expire类似,只是单位为毫秒
- ttl 剩余过期时间,时间返回为秒,-1表示永久存储,-2表示key不存在,其余表示过期时间
- pttl 和ttl类似,返回毫秒
- randomkey 随机返回一个key,如果数据库为空,返回nil
- rename key newkey 将key改名为newkey,当key和newkey相同或者key不存在时,返回一个错误,如果newkey存在,覆盖值
- type key 返回key所存储值的类型,none(key不存在),string,list,set,zset,hash
string类型
- set 设置一个值
- get 获取一个值
- mset 一次设置多个值 mset name zhangsan age 18 bir 2021-12-12
- mget 一次获取多个值 mget name age bir
- getset 获取原始key的值,同时设置新值
- strlen 获得对应key存储value的长度
- append 为对应key的value追加内容
- getrange 索引0开始,截取value的内容,不会修改原值。比如 getrange name 2 -1 返回2到末尾的值
- setex 设置值的时候就设置一个超时时间(秒),比如setex name 10 zhangsan
- psetex 设置值的时候就设置一个超时时间(毫秒)
- setnx 存在不做任何操作,不存在添加。成功返回1,否则返回0
- msetnx 可以同时设置多个key,原子操作(只要有一个key存在,就不做任何操作)
- decr 自减1
- decrby 自减给定的值
- incr 自增
- incrby 自增给定的值
- incrbyfloat 增加浮点数,比如 incrbyfloat age 1.3333333344444444444444
list
list是有序,可重复的,可以从左边添加元素,也可以从右边添加元素
- lpush key [value...] 将值加入到一个key的列表头部,比如:lpush lists a b c d e
- lpushx key value 同lpush,但必须保证key存在,比如: lpushx lists f
- rpush key [value...] 将值加入到一个key的列表尾部,比如:rpush list g h i j k
- rpushx key value 同rpush,但必须保证key存在,比如:rpushx list l
- lpop 返回和移除列表左边的第一个元素,比如: lpop lists 返回 "f"
- rpop 返回和移除列表右边的第一个元素,比如: rpop lists 返回"a"
- lrange 获取某一个下标区间内的元素,比如:lrange list 0 -1 表示遍历所有
- llen 获取列表元素的个数,比如: llen lists
- lset 设置某一个指定索引的值(索引必须存在),比如: lset list 0 gg
- lindex 获取某一个指定索引位置的元素,比如: lindex list 0
- lrem 删除重复元素,比如lrem list 2 gg 表示删除2个gg
- ltrim 保留列表中特定区间内的元素,会操作原数组,比如 ltrim list 0 2
- linsert在某一个元素之前,之后插入新元素,重复时从左到右匹配,比如 linsert list before i h
Set类型
Set类型也是集合,元素无需,不可以重复
- sadd: 为集合添加元素, 比如: sadd sets aa bb cc dd ee
- smembers:显示集合中的所有元素,比如: smembers sets
- scard:返回集合中元素的个数,比如:scard sets
- spop:随机返回一个元素,并将元素在集合中删除,比如:spop sets
- smove:从一个集合中向另一个集合移动元素,比如: smove set1 sets xx
- srem:从集合中删除一个或多个元素, 比如:srem set1 zz cc
- sismember:判断一个集合中是否含有这个元素,含有返回1,否则为0,比如 sismember setx aa
- srandmember:随机返回元素,不会删除,比如:srandmember sets 2
- sdiff:去掉第一个集合中其他集合含有的相同元素,比如:sdiff sets1 sets2
- sinter:求交集
- sunion:求并集
ZSet类型
特点:可排序的set集合,可以排序,不可重复。每个元素都带了一个分数,排序是靠分数实现的,又称可排序Set或者SortSet
- zadd 添加一个有序集合元素,比如 zadd zset1 10 zhangsan 9 xiaochen 8 xiaoming
- zcard 返回集合的元素个数,比如 zcard zset1
- zrange 升序 返回一个范围内的元素,比如 zrange zset1 0 -1 withscores 会展示分数
- zrangebyscore 按照分数查找一个范围内的元素,包含边界,比如 zrangebyscore zset1 9 10 limit 0 1 进行分页
- zrevrange 降序 返回一个范围内的元素
- zrank 返回排名,比如 zrank zset1 zhangsan
- zrevrank 倒序排名,比如 zrevrank zset1 zhangsan
- zscore 显示一个元素的分数,比如 zscore zset1 zhangsan
- zrem 移除某一个或多个元素,比如 zrem zset1 zhangsan xiaochen
- zincrby 给某个元素加分,比如 zincrby zset1 90 xiaoming
hash类型
特点:value是一个map结构,存在key-value,key无序
- hset 设置一个key/value对,比如 hset hash1 name zhangsan
- hget 获得一个key对应的value,比如 hgge hash1 name
- hgetall 获得所有的key/value对,比如 hgetall hash1
- hdel 删除某一个key/value 对,比如 hdel hash1 name height
- hexists 判断一个key是否存在,比如 hexists hash1 name
- hkeys 获得所有的key,比如 hkeys hash1
- hvals 获得所有的value,比如 hvals hash1
- hmset 设置多个key/value,比如 hmset hash1 bir 2020-12-12 address beijing clazz 2011
- hmget 获得多个key的value,比如 hmget hash1 name age bir
- hsetnx 设置一个不存在的key的值,比如 hsetnx hash1 jiguan chq
- hincrby为value进行加法运算,比如 hincrby hash1 age 100
- hincrbyfloat 为value加入浮点值,比如 hincrbyfloat hash1 age 1.455555555555555555