redis基础篇
redis基础篇
Huang_ChunRedis入门
启动Redis服务-服务端:双击Redis目录下
redis-server.exe
文件。客户端:双击Redis目录下
redis-cli.exe
文件
Redis简介
Redis是一个基于==内存==的
key-value
结构数据库。
- 基于内存存储,读写性能高
- 单线程,每个命令具备原子性
- 支持数据持久化(一段时间后会将数据存储到磁盘中)
- 支持多语言客户端(java,python…)
- 社会存储热点数据(热点商品,资讯,新闻)
- 企业应用广泛
Redis数据类型
- 5中常用数据类型介绍
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型
- 字符串String:普通字符串,Redis中最简单的数据类型。
- 哈希hash:也叫散列,类似于java中的HashMap结构。
- 列表list:按照差顺序排序,可以有触发元素,类似于java中linkedList。
- 集合set:无序集合,没有重复元素,类似于java中的HashSet。
- 有序集合sorted set/zset:集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素。
各种数据类型的特点
Redis常用命令
字符串操作命令
set key value
设置指定key的值get key
获取指定key的值mset
:批量添加多个string类型的键值对mget
:根据多个可以获取多个string类型的valueincr
: 让一个整型的key自增1incrby
:让一个整型的key自增并指定步长,例如:incrby num 2让num值自增2incrbyfloat
:让一个浮点类型的数字自增并指定步长Setex key seconds value
设置指定的key的值,并将key的过期时间设为seconds秒Setnx key value
只有在key不存在时设置key的值
哈希操作命令
- Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hset key field value
:将哈希表key中的字段field的值设为valuehget key field
:获取存储在哈希表中指定字段hmset
:批量添加多个hash类型key的field的值hmget
:批量获取多个hash类型key的Field的值hgetall
:获取一个hash类型的key中的所有的field和valuehkeys
:获取一个hash类型的key中的所有fieldhvals
:获取一个hash类型的key中的所有的fieldhincrby
:让一个hash类型key的字段值自增并指定步长hsetnx
:添加一个hash类型的key的field值,前提是这个field不存在,否则不行。hdel key field
删除存储在哈希表中指定字段hkeys key
:获取哈希表中所有字段。hvals key
:获取哈希表中所有值。
列表操作命令
- Redis List列表是简单的字符串列表,按照插入顺序排序,可以有触发元素,类似于java中
linkedList
。lpush key value1【value2】
:将一个或多个值插入到列表头部-l代表leftlpop key
:移除并返回列表的第一个元素,没有则返回nulllrange key start stop
:获取列表指定范围内的元素。rpush key element
:向列表右侧插入一个或多个元素rpop key
:移出并获取列表最后一个元素-r代表rightllen key
:获取列表长度blpop和brpop
:与lpop和rpop类似,只不过在没有意思时等待指定时间,而不是直接返回nil
利用List结构模拟一个栈:入口和出口在同一边。
利用List结构模拟一个队列:入口和出口在不同边。
利用List结构模拟一个阻塞队列:入口和出口在不同边,出队时采用blopop和brpop
集合操作命令
sadd key member1 [member2]
:向集合添加一个或多个成员。smembers key
:返回集合中的所有成员scard key
:获取集合的成员数sinter key1【key2】
:返回给定所有集合的交集。sunion key1[key2]
返回所有给定集合的并集。sdiff key1 key2
:求key1和key2的差集srem key member1[member2]
删除集合中一个或多个成员。sismember key member
:判断一个元素是否存在于set中
有序集合操作命令
- Redis有序集合sortedSet是string类型元素的集合,且不允许有触发成员。每个元素都会管理员工double类型的分数。与java中的TreeSet类似,SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(skipList)加hash表。经常被用于实现排行榜功能。
zadd key score1 member1【score2 member2】
:向有序集合添加一个或多个成员。zrange key start stop[withscores]
:通过索引区间返回有序集合中指定区间内的成员。zincrby key increment member
:有序集合中指定成员的分数加上增量incrementzrem key member【member】
:移除有序集合中的一个或多个成员。zscore key member
:获取sorted中的指定元素的score值。zrank key member
:获取sortedSet中的指定元素的排名。zcard key
:获取sortedSet中元素个数zcount key min max
:统计score值在给定范围内的所有元素的个数
zdiff,zinter,zunion
:求差集,交集,并集
通用命令
- Redis的通用命令是不分数据类型的,都可以使用的命令
keys pattern
:查找所有符号给定模式(pattern)的key–如*exists key
:检查给定的key是否存在。type key
:返回key所存储的值的类型。del key
:该命令用于在key存在是删除key。expire key
:给一个key设置有效期,有效期到期时该key会被自动删除ttl key
:查看一个key的剩余有效期
key的结构
- Redis的key允许有多个单词形成层级结构,多个单词之间用‘
:
’隔开,格式:项目名:业务名:类型:id
- 如user相关的key:
heima:user:1
- 如果value 是一个java对象,例如user对象,则可以将对象序列化为JSON字符串后存储
在java中操作Redis
- Redis的java客户端
- jedis
- Lettuce
- Spring Data Redis
- Spring Data Redis是spring的一部分,对Redis底层开发包进行了高度封装。在spring项目中,可以使用spring Data Redis来简化操作。
Jedis
- 引入依赖
- 建立连接
- 测试String
- 释放资源
- jedis连接池
- jedis本身是线程不安全的,并且频繁的创建和销毁连接会性能损耗,因此使用jedis连接池代替jedis的直连方式
Sprin Data Redis使用方式
- 引入依赖
- 配置文件
- 注入RedisTemplate
- 编写测试
SpringDataRedis的序列化方式
- RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认采用JDK序列化,得到结果
- 缺点:
可读性差,内存占用较大
。- 可以自定义RedisTemplate的序列化方式
重点——StringRedisTempalte
- Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认技术String方式,省去了自定义RedisTemplate的过程