Redis服务的启动
redis-server.exe redis.windows.conf
连接Redis服务器
redis-cli.exe -h 127.0.0.1 -p 6379 (p代表的是port-端口)
Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个基于内存的高性能的key-value数据库。
Redis 的三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis提供了丰富的类型,如string,list,set,zset,hash共五种数据结构。都是key-value的结构
Redis支持数据的备份,即master-slave模式的数据备份。
优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis相关命令
Redis支持五种数据类型
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(sorted set:有序集合)
基本命令
set name xiaoming 存值 set key value
get name 取值 get key
keys * 取出所有的key
expire name 60 设置过期时间(单位秒) expire key time
ttl name 查看剩余时间 ttl key
exists name 查看是否存在某个key exists key 返回0表示不存在,1存在
del name 删除 del key
type name 查看类型 type key
string
string是redis最基本、最常见的类型,一个key对应一个value ,类似于java中的String类型
string类型是二进制安全的
赋值语法
set key value
set命令用于设置给定key的值。如果key已经存在,那么会覆盖旧值,且无视类型
setnx key value (应用:分布式锁)
只有在key不存在时才设置key的值,如果已经存在,则不设置。
取值语法
get key
get命令用于获取指定key的值。如果key不存在,返回nil 。如果key存储的值不是字符串类型,返回一个错误
getrange key start end 截取字符串(类似于java中substring)
用于获取存储在指定key中字符串的子字符串,字符串的截取范围由start 和 end 两个偏移量决定
getset key value 取出旧值并设置新值 (登录 数据库表 zhangsan 123 登录时间)
getset命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil
strlen key
返回key所存储的字符串的长度
删除语法
del key
删除指定的key
自增/自减
incr key
incr命令将key中存储的数字值加1。如果key不存在,那么key的值会先被初始化为0,然后在执行incr操作
incrby key 增量值
incrby命令将key中存储的数字加上指定的增量值
decr key
decr命令将key中存储的数字减1
decrby key 减值
decrby 命令将key中存储的数字减去指定的值
应用场景
1. string通常用于保存单个字符串或json字符串数据
2. 因string是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储
3. 计数器(常规计数:点赞数、粉丝数,关注,取消关注等)
4. incr等指令本身具有原子操作的特性,所有我们完全可以利用redis的incr、incrby、decr、decrby等指令来实现原子计数的效果。假如在某种场景下3个客户端同时读取了mynum的值(为2),然后对其同时进行了加1的操作,那么mynum的值最后一定5。不少网站利用了redis的这个特性来实现业务上的统计计数需求。
hash
redis的hash是一个string类型的field和value的映射表(类似于java的对象),hash特别适合存储对象。
赋值语法
hset key field value
为指定的key,设定field/value
hmset key field value [field1 value1,field2 value2...]
同时向key的hash中设置多个field/value对