Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
目录
一.公共基本操作
1.查看redis运行环境信息
info2.选择数据库,index从0开始
select index3.set和get string类型的数据
set [key value]
get key
例如: set name liudehua4.清除当前数据库的所有数据
flushdb5.清除所有数据库中的数据
flushall6.key值对应记录了存在数目
说明:存在返回条数,不存在返回0
例如:exists name
查看所有记录: keys *7.查看存在的key
keys *8.将某个key移动到指定数据库中
例如:将key为name的记录移动到0号数据库
move name 09.设置对应key记录的过期时间,单位是秒
例如:设置name10秒过期
expire name 1010.查看某个key剩余生效时间
>0: 剩余秒数
-1:永久有效
-2:key对应记录不存在
例如:
ttl name11.查看key对应value的编码方式
例如:
object encoding somekey
二.五大数据类型操作
(一)string
字符串类型:
1)set
set [key] [value]
2)get
get [kay]
3)append
append [key] [value]
4)strlen
strlen [key]
5)setrange: 替换字符串
例如:
setrange name 2 abc
6)getrange:截取字符串
举例:
getrange name 2 5
//全部字符串
getrange name 0 -1
7)setex <==> set with expire: 设置值和过期时间
例如: 设置key并且设置30秒的过期时间
setex key 30 "HelloWorld"
8)setnx <==> set if not exist: 不存在在设置(分布式锁中经常使用)
例如:如果key不存在就设置为redis
setnx key redis
9)mset:同时设置多个key
例如:mset k1 v1 k2 v2 k3 v3 k4 v4
10)mget:同时获取多个key
例如:mget k1 k2 k3
11)getset:先获取再修改,如果不存在就添加,返回的是旧值
例如: getset db "redis"数值类型:
12)set
set [key] [value]
13)incr 加一
incr [key]
14)decr 减一
decr [key]
15)incrby 增加指定数值
incrby [key] [value]
16)decrby 减少指定数值
decrby [key] [value]
(二)hash
hash是一种散列表结构,和C++ STL的unordered_map类似
1)hset:增加数据对
例如:在hash myhash中增加key - hello数据对
hset myhash key hello
2)hget:根据key获取对应值
例如:hget myhash key
3)hmset:增加多个数据对
例如:hmset myhash key1 abcd key2 efgh key3 ijklmn
4)hmget: 根据key批量获取元素
例如:hmget myhash key1 key2 key3
5)hgetall:获取全部元素
例如:hgetall myhash
6) hdel:删除元素
例如:删除哈希myhash中key1元素
hdel myhash key1
7)hlen: 获取哈希中元素个数
例如:hlen myhash
8)hexists: 判断元素是否存在
例如:HEXISTS myhash key
9)hkeys:获取所有元素的key
例如:hkeys myhash
10)hvals:获取所有元素的value
例如:hvals myhash
11)hincrby:元素增加某个数值
例如:加2
HINCRBY myhash key 2
12)hdecrby:元素减去某个数值
例如:减3
hdecrby myhash key 3
13)hsetnx:如果不存在则增加,返回1,存在什么都不做,返回0
例如:哈希myhash中如果不存在key4则加入key4 - world数据对,否则什么也不做
hsetnx myhash key4 world
(三)list
重点说明: 在redis中,我们可以把List看成栈、队列、阻塞队列使用,可以在链表的before,after,left,right都可以插入元素
1)lpush : 左侧插入1个或者多个
例如: lpush mylist one two
2)lrange : 获取区间内的值
例如: 返回列表全部 lrange list 0 -1
3)rpush : 列表右侧插入数据
4) lpop:从左边删除一个元素
5) rpop:从右边删除一个元素
6)lindex:根据下标获取列表元素
例如: lindex list 1
7)llen:获取列表长度
例如: llen list
8)lrem: 删除指定元素
例如:删除key为list中1个值为one元素
lrem list 1 one
9)ltrim:截断一个值
例如:只保留列表mylist的1号和2号元素(0号,>=3号都被删除)
ltrim mylist 1 2
10)rpoplpush: 删除列表最右侧元素并插入另一个最左侧
例如: rpoplpush list1 list2
11)lset:根据下标修改元素
例如:将key为list的0号元素值修改为item
lset list 0 item
12)linsert:在列表之前或者之后插入一个或者多个元素
linsert [key] before/after [value ...]
例如:
linsert list before item hello
linsert list after item hello
(四)set
1)sadd:添加元素
例如:sadd myset hello
2)smembers:查看set集合中的成员
例如:smembers myse
3)sismember:查看集合中是否存在此成员 存在返回 1 不存在 0
例如:sismember myset peng
4)scard:获取集合中元素个数
SCARD myset
5)srem:从集合中移除元素
例如:srem myset hello
6)srandmember:随机从集合中取出一个或者多个元素
例如:随机取一个 / 随机取两个
srandmember myset
srandmember myset 2
7)spop:随机删除集合中的元素
例如:spop mylist
8)smove: 将一个元素从一个集合移动到另一个集合中
例如:将集合myset中元素hello移动到集合myset1中
smove myset myset1 hello
9)集合运算一:交集 SINTER
例如:SDIFF set1 set2
10) 集合运算二:并集 SUNION
例如:SDIFF set1 set2
11) 集合运算三:差集 SDIFF
例如:SDIFF set1 set2
(五)zset
zset在set的基础上增加了一个score值,
set格式如 set key v
zset格式如 zset k score1 v1
1)zadd:添加一个或多个元素
例如:添加一个元素
zadd myzset 1 one
添加三个元素
zadd myzset 2 two 3 three 4 four
2)zrange:查看元素
例如:查看所有元素
ZRANGE myzset 0 -1
3)zrangebyscore : 排序
例如:年龄从小到大排序
zadd age 18 zhangsan 15 lisi 20 wangwu
ZRANGEBYSCORE age -inf +inf
从小到大排序并显示score值
ZRANGEBYSCORE age -inf +inf withscores
从大到小排序
zrevrange age 0 -1
取score在负无穷到100之间的元素,从小到大排序并显示元素的score值
RANGEBYSCORE age -inf 100 withscores
4)zrem : 从zset集合中移除元素
例如:zrem age lisi
5)zcard: 查看集合中元素的个数
例如:zcard age
6)zcount:统计score值在某个区间中的成员数量
例如:
zadd myzset 100 name1 200 name2 300 name3 400 name4
zcount myzset 100 400
三.常见错误及其处理
1.(error) MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
原因:
强制关闭Redis快照导致不能持久化
解决方案:
config set stop-writes-on-bgsave-error no