Redis里String的用法

118 阅读3分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

Redis 是什么?

Redis(Remote Dictionary Server),即远程字典服务,Redis可以看成服务器也可以是数据库,是一个开源的使用ANSI、C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,包括:C、C++、C#、Java、PHP等25种语言。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从复制)、哨兵机制等。Redis安装非常简单,而且非常轻量化,推荐在Linux上使用。安装好之后可以简单测试一下redis的性能,测试的基本命令格式: redis-benchmark [option] [option value]

例如redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000,这条命令用来测试一千万次请求,看看Redis处理需要多长时间。

1.Redis的基础知识:

redis有16个数据库,默认使用的是第0个数据库,可以用select来进行选择,用dbsize查询数据库大小,不同的数据库存储的数据不一样。

查看当前数据库有那些键:keys*
清空当前数据库:flushdb
清空所有数据库:flushall

另外,Redis是单线程的!Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是机器的内存和网络带宽,可以使用单线程来实现。Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-vale的Memecache差!Redis为什么单线程还这么快?这里存在两个误区:高性能的服务器不一定是多线程的以及多线程(CPU上下文会切换,次数越多,消耗的总时间越长)不一定比单线程效率高!

核心:redis是将所有的数据全部放在内存里面。所以说使用单线程去操作效率就是最高的,多线程(CPU上下文切换也会耗时),对于内存系统来说。如果没有上下文切换,效率就是最高的!多次读写都是在一个cpu上的,在内存情况这个就是最佳方案!另外,redis的命令不区分大小写

2.五大数据类型

   Redis跟一些常用命令:
    keys * 查看当前数据库所有的键
    exists key-name:查看键是否存在    
    move key-name db:移动当前key指定数据库
    expire key-name seconds:设置某个键的过期时间(秒数)
    ttl key-name:查看键还有多长时间过期
    type key-name:查看当前key的类型

2.1 String(字符串)

跟字符串相关的基本命令

append [key-name] [value]:在当前键值后面追加字符串,如果当前键不存在,相当于set
strlen:返回当前键值的长度

1.相当于java的i++的操作
    incr key-name:键值自增1
    decr key-name:键值减1
    incrby key-name 步长:设置步长,指定增量
    decrby key-name 步长:设置步长,指定递减的量
2.字符串的范围
    getrange key-name start end:截取字符串
    getrange key-name 0 -1:获取全部的字符串,和get key是一样的

    setrange key-name index value:从索引位置往后替换

3.过期时间
    setex(set with expire)设置键值,同时设置过期时间
    setnx(set if not exist)不存在则设置

    同时设置获取或者获取多个:
    mset,mget,msetnx
    msetnx相当于原子操作,要么同时成功,要么都失败

4.设置对象:
    set user:1 {name:zhangsan,age:3} 设置一个user:1对象,值为josn字符来保存一个对象
    还可以用:mset user:{id}:{filed}

组合的命令:getset,先getset,如果key不存在,则返回nil,并设置值,
如果key存在,则返回之前的值,并设置新的值