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的键值对 |