Redis配置和使用:
地址:https://github.com/MSOpenTech/redis/releases
下载后解压即可,可以把解压后的文件目录放到环境变量中。
以windows系统为例,运行redis
cmd——>目录/redis-server.exe redis.windows.conf
获取配置信息:
cmd——>目录/redis-cl –h 127.0.0.1 –p 6379(-h指定地址,-p指定端口,-a指定密码,默认127.0.0.1:6379)
再执行CONFIG GET *,将获得所有的配置信息
redisObject
redis内部使用redisObject对象来表示所有的数据,该对象包含了数据的类型,编码方式以及其他一些重要的信息
String
String一共有三种编码,分别为int、embstr、raw,分别对应int的底层是long类型的整数,而其他两种编码则是字符串类型,embstr用于保存长度较小的串且不可改写,任何的修改都是将其转换成raw后进行的
格式:set key value[EX s][PX ms] [NX|XX]
key :键若该键已存在,则覆盖value
value:值
EX:过期时间,单位s
PX:过期时间,单位ms
NX | XX:前者不更新只添加,后者只更新不添加
Hash
可以看作一个键值对的集合,其中键为String类型。
Hash有两种编码,ziplist或hashtable
ziplist:用于数量少且数据小的情况
hashtable:实际上使用了两张表来管理数据,一张表为主表,用于存放数据,另外一张表用于rehashing时临时保存数据
插入:hmset key field value [field value…]
查询:hget key field
key:集合名
field:其中存储的键值对的键
value:对应前一个键的值
一个Hash可以存储2^32-1个键值对
List
字符串列表,依照插入顺序排列
List有两种编码,ziplist或linkedlist
ziplist:一种压缩链表,用于储存连续的较小数据
linkedlist:类似于java中的LinedList,也是一种双链表的实现,每次新增数据都需要申请分配一块内存
插入:lpush key value[value]
查询:lrange key startstop
key:列表名
value:表中的值,可以有多个
start / stop:起始索引(0开始) / 终止索引
一个List可以存储2^32-1个元素
Set
无序String集合,通过散列存储,不允许重复元素
Set有两种编码,hashtable或intset
intset:整数集合,且是有序的
插入:sadd key member[members…] 返回插入成功的成员数量
查询:smembers key
key:集合名
member:元素
最大成员数量2^32-1
Zset
类似于Set,同样不允许重复,但会为每一个member设置一个double类型的score,通过double进行排序
Zset有两种编码:ziplist或skiplist+hashtable
skiplist:一种跳跃表结构,至于跳跃表的具体原理以及实现参照:
https://blog.csdn.net/u014427196/article/details/52454462
https://www.cnblogs.com/George1994/p/7635731.html
skiplist保证了数据的有序性,而hashtable保证了操作的效率
插入:zadd key[NX|XX] [CH] [INCR] score member [score member…]
查询 1:zrange key startstop
2、zrangebyscore key min max
key:集合名
NX | XX:前者不更新不添加,后者只更新不添加
CH:修改返回值为发生变化的成员总数,默认是返回新增的成员总数
INCR:对成员的分数进行递增操作
数据保存
RDB方式保存数据:
获取保存数据的目录:config get dir
若需要更改目录:config set dir xxxxxx
需要保存时执行SAVE (BGSAVE,异步保存),即在dir目录下生成dump.rdb,该转储文件可以修改默认文件名
恢复数据只需要将对应的rbd文件放到dir下,启动服务即可
相关参数:
save 900 1
save 300 10
save 60 10000
save X Y 意为若X秒内发生了Y次更新,则进行一次持久化
AOF方式保存数据:
启用/关闭AOF方式:
appendonly yes/no
每次更新后保存一次:
appendfsync always
每秒更新一次:
appendfsync everysec
从不更新,由操作系统控制:
appendfsync no
采用AOF方式,设置每秒更新一次,其安全性比RBD方式更好,若发生了意外情况最多也只丢失一秒的数据
Redis事务管理
windows系统下启动命令行连接到redis服务器。
四个常用命令:
multi、exec、discard、watch
multi:开始一个事务,redis进入事务状态
exec:执行multi后到exec前所有进入队列的事务
discard:取消事务,当前事务队列中的所有事务均不会得到执行,并退出事务环境
watch:redis中的一种乐观锁机制,当Client1中开始了一个事务,并对keyA进行了修改,但在执行前Client2修改了keyA,那么Client1的事务将不会执行
发布和订阅
redis对该功能有一个非常简单的实现,订阅频道的命令为:
subscribe channel [channel...]
channel:任意合法的频道名称,无需事先注册
推送信息:
publish channel message
返回接收到此信息的客户端数量
Java对Redis的支持
需要提供支持的包,下载地址:https://mvnrepository.com/artifact/redis.clients/jedis
初始化:
public Jedis(String host) public Jedis(String host, int port)
初始化的方法非常多,这里不再作记录。
Jedis库保留了Redis原生了语法风格,以下是一些主要的方法:
删除:
public Long del(String... keys)
String:
public String set(String key, String value) public String set(String key, String value, String nxxx, String expx, long time) public String get(String key)
Hash:
public Long hset(String key, String field, String value) public String hmset(String key, Map<String,String> hash) public List<String> hmget(String key, String... fields) public String hget(String key, String field) public Long hdel(String key, String... fields)
List:
public Long lpush(String key, String... strings) public List<String> lrange(String key, long start, long end) public String lpop(String key)
Set:
public Long sadd(String key, String... members) public java.util.Set<String> smembers(String key) public Long srem(String key, String... members)
Zset:
public Long zadd(String key, double score, String member) public Long zadd(String key, Map<String, Double> scoreMembers) public Set<String> zrange(String key, long start, long end) public Set<String> zrangeByScore(String key, double min, double max) public Long zrem(String key, String... members)