Redis(Remote Dictionary Server)
NoSQL(非关系型数据库)
非关系型数据库的数据是非结构化的 (没有固定的结构)、无关联的 (没有关系的创建和维护)、非sql (没有固定的语法)、事务特性BASE
Redis引入
Redis是一个基于内存的键值型NoSQL数据库。
特征:
- 键值型,value支持多种不同的数据结构,功能丰富。
- 单线程,每个命令具备原子性。
- 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
- 支持数据的持久化。
- 支持主从集群、分片集群。
- 支持多语言客户端。
Redis支持的数据结构
- 字符串 String
- 列表 List
- 集合 Set
- 有序集合 Sorted Set
- 哈希 Hash
- 消息队列 Stream
- 地理空间 Geospatial
- HyperLogLog
- 位图 Bitmap
- 位域 Bitfield
Redis的使用方式
- CLI(Command Line Interface) 命令行工具
- API(Application Programming Interface) 编程语言接口
- GUI(Graphical User Interface) 图形化界面
Redis优点
- 性能极高
- 数据类型丰富,单键值对最大支持512M大小的数据
- 简单易用,支持所有主流编程语言
- 支持数据持久化,主从复制,哨兵模式等高可用特性
Redis登录
redis-server启动服务端
redis-cli启动客户端(这里的启动的客户端得到的中文会显示二进制)
redis-cli --raw启动客户端(这里启动的客户端得到的中文会显示中文)
Redis的Key操作
| 序号 | 命令 | 描述 |
|---|---|---|
| 1 | del key |
用于在key存在时删除key |
| 2 | dump key |
序列化给定的key,并返回被序列化的值 |
| 3 | exists key |
检查给定的key是否存在 |
| 4 | expire key seconds |
为给定的key设置过期时间,单位为秒 |
| 5 | expireat key timestamp |
为 key 设置过期时间。接受的时间参数是 UNIX 时间戳(Unix时间戳是从 1970年1月1日00:00:00 UTC 开始计算的秒数) |
| 6 | pexpire key milliseconnds |
设置key的过期时间以毫秒计 |
| 7 | pexpireat key milliseconds-timestamp |
设置key过期时间的时间戳以毫秒计 |
| 8 | keys pattrern |
查找所有符合给定模式(pattern)的key,比如keys * |
| 9 | move key db |
将当前数据库的key移动到给定的数据库db中 |
| 10 | persist key |
移出key的过期时间,将key持久保持 |
| 11 | pttl key |
以毫秒为单位返回key的剩余的过期时间 |
| 12 | ttl key |
以秒为单位,返回给定key的剩余生存时间ttl |
| 13 | randomkey |
从当前数据库中随机返回一个key |
| 14 | rename key newkey |
修改key的名称 |
| 15 | renamenx key newkey |
当newkey不存在时,将key改名为newkey |
| 16 | type key |
返回key所储存的值的类型 |
| 17 | scan n |
迭代遍历key,会返回下一个迭代的起始索引和本次迭代的key,n=0,1,2,3,... |
| 18 | flushall |
删除全部键 |
| 19 | clear |
清空命令行 |
Redis数据结构
字符串:
| 序号 | 命令 | 描述 |
|---|---|---|
| 1 | set key value |
设置键值 |
| 2 | mset key1 value1 key2 value2... |
批量设置键值 |
| 3 | setnx key value |
只有当键不存在时设置成功,否则不做任何操作 |
| 4 | msetnx key1 value1 key2 value2 ... |
只有当全部的key都不存在时设置成功,否则不做任何操作 |
| 5 | setex key seconds value |
设置带有过期时间的键,单位s |
| 6 | psetex key milliseconds value |
设置带有过期时间的键,单位ms |
| 7 | get key |
得到键值 |
| 8 | mget key1 key2... |
批量获取键值 |
| 9 | getrange key start end |
返回key中字符串值的子字符 |
| 10 | getset key value |
将给定的key的值设为value,并返回key的旧值 |
| 11 | setrange key offset value |
用value参数覆盖所存储的字符串,从offest偏移开始 |
| 12 | incr key |
自增1 |
| 13 | incrby key n |
自增n |
| 14 | incribyfloat key n |
自增一个小数n |
| 15 | decr key |
自减1 |
| 16 | decrby key n |
自减n |
| 17 | strlen key |
返回key所存储的字符串值的长度 |
| 18 | append key value |
将指定字符串追加到key所存储的字符串末尾 |
列表:
| 序号1 | 命令 | 描述 |
|---|---|---|
| 1 | lpush key value1 value2... |
将一个或多个值插入到列表头部 |
| 2 | rpush key value1 value2... |
将一个或多个值插入到列表尾部 |
| 3 | lpushx key value |
将一个值插入到已存在的列表头部,列表不存在则操作无效 |
| 4 | rpushx key value |
将一个值插入到已存在的列表尾部,列表不存在则操作无效 |
| 5 | linsert key before/after value1 value2 |
在列表的一个元素前或后插入元素,当指定元素不存在于列表则操作无效,当列表不存在时,不执行任何操作。 |
| 6 | brpoplpush list1 list2 timeout |
从list1中取最后一个值,弹出并插入到list2的头部,如果list1为空则阻塞等待timeout直到超时或有元素 |
| 7 | rpoplpush list1 list2 |
从list1中取最后一个值,弹出并插入到list2的头部,如果list1为空则返回nil |
| 8 | blpop list1 list2... timeout |
同时监听一个或多个列表,谁先有元素先从头部弹出并获取,如果没有元素阻塞等待timeout直到超时或有元素 |
| 9 | brpop list1 list2... timeout |
同时监听一个或多个列表,谁先有元素先从尾部弹出并获取,如果没有元素阻塞等待timeout直到超时或有元素 |
| 10 | lpop key |
移除并获取列表的第一个元素 |
| 11 | rpop key |
移除并获取列表的最后一个元素 |
| 12 | lindex key index |
通过索引获取列表中的元素 |
| 13 | ltrim key start stop |
对列表进行修剪,只保留选中区间内的元素 |
| 14 | lrange key start stop |
获取列表指定范围内的元素 |
| 15 | llen key |
获取列表长度 |
| 16 | lrem key count value |
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 count = 0 : 移除表中所有与 VALUE 相等的值。 |
| 17 | lset key index value |
通过索引来设置一个列表的值,当索引超出范围时,返回一个错误 |
集合:
| 序号 | 命令 | 描述 |
|---|---|---|
| 1 | sadd key member1 member2 |
向集合中添加一个或多个成员 |
| 2 | scard key |
获取集合的成员数 |
| 3 | sdiff key1 key2... |
返回第一个集合和其他集合的差集 |
| 4 | sdiffstore key0 key1 key2... |
返回第一个集合和其他集合的差集并存储在key0中 |
| 5 | sinter key1 key2... |
返回给定集合的交集 |
| 6 | sinterstore key0 key1 key2... |
返回给定集合的交集并存储在key0中 |
| 7 | sunion key1 key2... |
返回给定集合的并集 |
| 8 | sunionstore key0 key1 key2... |
返回给定集合的并集并存储在key0中 |
| 9 | sismember key member |
判断集合中是否有member元素 |
| 10 | smembers key |
返回集合中所有成员 |
| 11 | smove key1 key2 member |
将member元素从集合1移动到集合2 |
| 12 | spop key |
移除并返回集合中的一个随机元素 |
| 13 | srandmember key [count] |
返回集合中一个或多个随机元素 |
| 14 | srem key member1 member2... |
移除集合中一个或多个成员 |
| 15 | sscan key n |
迭代遍历集合中的元素 |
有序集合:
有序集合和集合的区别:有序集合每个元素都会关联一个分数,根据分数大小进行排序。
默认排序从小到大
| 序号 | 命令 | 描述 |
|---|---|---|
| 1 | zadd key score1 member1 score2 member2... |
向有序集合中添加一个或多个成员,或更新已经存在成员的分数 |
| 2 | zcard key |
获取有序集合的成员数 |
| 3 | zcount key min max |
计算在有序集合中指定分数区间的成员数 |
| 4 | zlexcount key min max |
计算在有序集合中指定字典区间的成员数 |
| 5 | zrange key start stop |
返回有序集合指定区间的成员,分数从低到高 |
| 6 | zrangebylex key min max |
返回有序集合中指定字典区间的成员 |
| 7 | zrangebyscore key min max |
返回有序集合中指定分数区间的成员 |
| 8 | zrank key member |
返回有序集合指定成员的索引 |
| 9 | zincrby key n member |
在有序集合中对指定成员的分数加n |
| 10 | zunionstore key0 n key1 key2... |
计算给定的n个有序集合的并集并将结果存储在key0中 |
| 11 | zinterstore key0 n key1 key2... |
计算给定的n个有序集合的交集并将结果存储在key0中 |
| 12 | zrem key member1 member2... |
移除有序集合中的一个或多个成员 |
| 13 | zremrangebylex key min max |
移除有序集合中给定字典区间的成员 |
| 14 | zremrangebyrank key start stop |
移除有序集合中给定排名区间的成员 |
| 15 | zremrangebyscore key min max |
移除有序集合中给定分数区间的成员 |
| 16 | zrevrange key start stop |
返回有序集合中指定区间内的成员,分数从高到低 |
| 17 | zrevrangebyscore |
返回有序集合中指定分数区间内的成员,分数从高到低 |
| 18 | zrevrank key member |
返回有序集合中指定成员的排名,分数从高到低 |
| 19 | zscore key member |
返回有序集合中某个成员的分数值 |
| 20 | zscan key n |
迭代遍历有序集合中的元素 |
哈希Hash:
| 序号 | 命令 | 描述 |
|---|---|---|
| 1 | hset key field value |
将哈希表key中的字段field的值设为value |
| 2 | hsetnx key field value |
当field字段不存在时,将哈希表key中的字段field设为value |
| 3 | hmset key field1 value1 field2 value2... |
批量设置哈希表key中的多个字段field的值为value |
| 4 | hget key field |
获取哈希表key中的字段field的值 |
| 5 | hmget key field1 field2... |
获取哈希表key中指定的字段的值 |
| 6 | hgetall key |
获取哈希表key中所有的字段和值 |
| 7 | hkeys key |
获取哈希表key中所有的字段 |
| 8 | hvals key |
获取哈希表key中所有的值 |
| 9 | hdel key field1 field2... |
删除哈希表key中一个或多个字段 |
| 10 | hexists key field |
查看哈希表key中,指定的字段是否存在 |
| 11 | hlen key |
获取哈希表key中字段的数量 |
| 12 | hincrby key field n |
为哈希表key中指定字段的整数加上n |
| 13 | hincrbyfloat key field n |
为哈希表key中指定的浮点数加上小数n |
| 14 | hscan key n |
迭代遍历哈希表key的键值对 |