Redis 命令之 String
redis 是开源免费, 基于内存操作的kv非关系数据
redis 为什么是单线程还这么快?
redis 是将所有的数据都放在内存中,所以说单线程操作就是最高的。多线程(cpu上下文切换:是个一个非常耗时的操作) 对于内存系统来说,如果没有上下文切换,效率就是最高的 多次读写都是在一个cpu上面的
库, redis的优点就是基于内存操作,数据类型多(,有五个常用的数据类型, 有三个不常用的数据.) 查询速度快. redis是单线程的。 redis默认的数据库有16个
redis-cli # 启动redis 数据库 192.168.120.128:6379> ping # 验证redis 设置是否正确 PONG # 返回 PONG # 添加一个kv的数据 set 就是添加 set key value 192.168.120.128:6379> set name xiaomo OK # get 获取添加的key set key 192.168.120.128:6379> get name "xiaomo" # 查看所有的key 192.168.120.128:6379> keys * 1) "name" # 清楚当前库中所有的key 192.168.120.128:6379> flushdb OK 192.168.120.128:6379> keys * (empty array) 192.168.120.128:6379> # 清楚所有库中的key 192.168.120.128:6379> flushall OK 192.168.120.128:6379> keys * (empty array) # 切换数据库 192.168.120.128:6379> select 1 OK 192.168.120.128:6379[1]>
192.168.120.128:6379> set name xiaomo OK 192.168.120.128:6379> get name "xiaomo" # 判断这个key 是否存在 192.168.120.128:6379> exists name (integer) 1 # 将你的key 移动到 db1 数据库中 语法格式 move key db 192.168.120.128:6379> move name 1 (integer) 1 # 切换数据库 192.168.120.128:6379> select 1 OK # 查询所有的key 36 192.168.120.128:6379[1]> keys * 1) "name" # 设置一个key的过期时间 单位是秒 192.168.120.128:6379> EXPIRE name 10 (integer) 1 # ttl 查看当前key的剩余时间 192.168.120.128:6379> ttl name (integer) 8
# 查看key 数据类型 type
192.168.120.128:6379> type name
string
192.168.120.128:6379> type age
string
redis 数据类型 String(字符串) # APPEND 尾部添加 (如果当前key 不存在就相当于set key values) 192.168.120.128:6379> set name tom1 OK 192.168.120.128:6379> APPEND name 'good student' (integer) 16 192.168.120.128:6379> get name "tom1good student" # strlen 获取字符串长度 192.168.120.128:6379> STRLEN name (integer) 16 192.168.120.128:6379> set views 0 OK 192.168.120.128:6379> get views "0" # + 1 相当于 i++ ''' # incr +1 # decr -1 # incrby key + 设置默认步长 # decrby key - 设置默认步长 ''' 192.168.120.128:6379> incr views (integer) 1 192.168.120.128:6379> incr views (integer) 2 192.168.120.128:6379> decr views (integer) 1 192.168.120.128:6379> get views "1" 192.168.120.128:6379> INCRBY views 10 (integer) 10 192.168.120.128:6379> DECRBY views 5 (integer) 5 192.168.120.128:6379> get views "5" 192.168.120.128:6379> set key1 tom1 OK # GETRANGE 截取字符串内容 192.168.120.128:6379> GETRANGE key1 0 1 "to" # 获取全部字符串 192.168.120.128:6379> GETRANGE key1 0 -1 "tom1" 192.168.120.128:6379> set key2 xiaomo OK 192.168.120.128:6379> get key2 "xiaomo" # SETRANGE 替换 语法 格式 SETRANGE key [第几个字符] [替换内容] 192.168.120.128:6379> SETRANGE key2 1 a (integer) 6 192.168.120.128:6379> get key2 "xaaomo" # setex key [过期时间] value 192.168.120.128:6379> SETEX key3 10 hello OK 192.168.120.128:6379> ttl key3 (integer) 4看 # setnx key value TRUE = 1 False=0 # 如果这个key 存在则返回0 如果这个key不存在返回1 192.168.120.128:6379> SETNX key3 'redis' (integer) 1 192.168.120.128:6379> keys * 1) "key2" 2) "key1" 3) "key3" 192.168.120.128:6379> SETNX key3 're' (integer) 0 # mset 设置多个 key 一个key对应一个value 192.168.120.128:6379> mset k1 v1 k2 v2 k3 v3 OK # mget 查询多个key 192.168.120.128:6379> MGET k1 k2 k3 1) "v1" 2) "v2" 3) "v3" # MSETNX 如果这个key不存在就创建, 注意这是一个原子操作,要么都成功 要么都失败。 192.168.120.128:6379> MSETNX k1 v1 k5 v5 (integer) 0 192.168.120.128:6379> mset user:1:name tom user:1:age 10 OK 192.168.120.128:6379> mget user:1:name user:1:age 1) "tom" 2) "10" # 如果不存在值,返回nil 192.168.120.128:6379> GETSET db redis (nil) 192.168.120.128:6379> get db "redis" # 如果存在新的值,返回原来的值,并设置新的值 192.168.120.128:6379> getset db mongodb "redis" 192.168.120.128:6379> get db "mongodb" # 一般应用场景 STRING : 来设置统计数