redis基本数据类型-redis系列教程

来源:互联网 发布:思念诗词 知乎 编辑:程序博客网 时间:2024/05/29 17:27

基础知识

单进程

redis程序采用的是单进程模型来处理客户端的请求,对读写等事件的响应是通过对epoll函数的包装来实现。

redis的实际处理速度完全依靠主进程的执行效率,假如同时有多个客户端并发访问,则服务器处理能力在一定情况下将会下降。假如要提升服务器的并发能力,那可以采用在单台服务器上部署多个redis进程的方式。

多数据库

  • redis每个数据库是用从 0 开始递增的数字来命名的,初始化 16 个(可以在配置文件中修改)数据库,默认使用 0 号数据库,你也可以使用 select [数字] 来切换数据库。
  • dbsize 查看当前数据库KEY的数量
  • move key db 在多个数据库之间移动数据
  • flushdb 清除当前数据库的全部数据
  • redis不支持自定义数据库名字
  • redis不支持为每个数据库设置不同的访问密码(只能是统一的密码)
  • 多个数据库之间并不完全的隔离,使用 flushall 可以清空全部的数据。
  • redis的数据库更像是一个命名空间

基本数据类型

KEY(键)

  • key是字符串类型,如果中间有空格或者转义字符要用引号引起来,当然不建议这么做,这在低版本上可能不被支持。
  • 命名建议 对象类型:对象标识(ID):对象属性,例如 user:u100001:age
  • 多个单词之间用 . 分隔,例如 user:u100001:body.head
  • 在可读的情况下key应该尽量有意义并且简短

VALUE(值)

String

可以存储String/Integer/Float类型的数据,甚至是二进制数据,一个字符串最大容量是512M

List

底层实现上不是数组而是链表,也就是说在头部和尾部插入一个新元素,其时间复杂度是常数级别。当然也有弊端,比如元素定位比数组慢。

Set

无序不可重复列表,是通过HashTable来实现。

Hash

按照K/V方式来存储字符串,类似于java中的Map

ZSet

有序且不可重复,根据Score来排序。使用散列表和跳跃表来实现,所以读取中间部分数据也很快。

Geo

地理空间坐标的存储,很方便的计算两点之间的直线距离。

基本操作

键操作

  • keys pattern 获得符合规则的键名列表,pattern支持glob风格通配符格式

    • ? 匹配一个字符
    • * 匹配任意字符
    • [] 匹配中括号内的任一字符,可以用来表示一个范围
    • \x 匹配字符x,用于转义符号
    127.0.0.1:6379[1]> keys *127.0.0.1:6379[1]> keys t?[a-z]
  • exists key 判断指定键是否存在,如果存在返回1(非0即真)
  • scan cursor [MATCH pattern] [COUNT count] 基于游标的迭代器,可以用来遍历键(分页浏览键)。

    127.0.0.1:6379[1]> scan 0 count 31) "5"2) 1) "myhash"2) "myzset"3) "a"127.0.0.1:6379[1]> scan 5 count 31) "7"2) 1) "myset"2) "key2"3) "myset2"4) "myset3"

删除

  • del key 删除指定键值
  • del命令虽不支持通配符,但可以结合linux管道和xargs命令来自定义删除。例如 redis-cli keys * | xargs redis-cli del ,如果键名称中有空格可能并不会被删除。

类型

  • type key 获得键值的数据类型
  • 数据都是以string类型存储,在做计算时会自动进行类型转换。

重命名

  • rename key newkey 修改指定键名称
  • renamenx key newkey 如果新的键名不存在则改名,防止已存在键被覆盖。

生存&过期时间

  • expire key seconds 修改键的生存时间(单位秒)
  • pexpireat key milliseconds-timestamp 修改键的生存时间(单位毫秒)
  • expireat key timestamp 修改键的到期时间(时间戳),从1970年1月1日起的秒数
  • pexpireat key milliseconds-timestamp 修改键的到期时间(时间戳),从1970年1月1日起的毫秒数
  • ttl key 返回键剩余生存时间(单位秒)
  • pttl key 返回键剩余生存时间(单位毫秒)
  • randomkey 返回随机一个键

迁移

  • migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key] 在两个redis实例之间迁移键
  • MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3