记录一下Redis的安装与基本使用
Redis(REmote DIctionary Server)远程字典服务器,免费开源,是一个高性能的(Key/Value)分布式内存数据库。其特点为,数据类型丰富,各种各样的问题都可以映射到这些数据结构中,Redis数据结构致力于解决用户问题,性能方面,Redis支持集群加之本身作为内存数据库我们可以很方便的进行每秒数千万的访问,并且Redis支持数据持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载使用,集群方面Redis支持数据备份和容灾恢复,保证了高可用,支持多种语言接口,支持事务、发布订阅等功能,总体性价比较高。
下载地址
提取码 ly4i
1.Windows服务启动Redis
2.手动启动Redis
1.连接Redis
redis-cli.exe -h 127.0.0.1 -p 6380 -a abc+2015
2.设置与获取String
set holecu 25get holecu
3.设置与获取List
rpush list 1,2,3rpush list 4lrange list 0 1
4.控制台命令执行界面
1.下载地址
下载地址
提取码 1y5c
2.登入连接
3. Key/Val操作界面
1.Nuget StackExchange.Redis与Newtonsoft.Json
2.C# Redis 基本操作
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using StackExchange.Redis;using Newtonsoft.Json;namespace RedisDemo{ class Program { static void Main(string[] args) { //127.0.0.1:6379:IP,端口 //password:Redis密码 //connectTimeout:连接超时时间,这里设置的是1000毫秒 //connectRetry:重试连接次数 //syncTimeout:同步操作默认超时时间 ConnectionMultiplexer _conn = ConnectionMultiplexer.Connect("127.0.0.1:6380,password=abc+2015,connectTimeout=1000,connectRetry=1,syncTimeout=1000"); var db = _conn.GetDatabase(5);//指定连接库 5 //存取单值 db.StringSet("表面处理", "沉金"); string str = db.StringGet("表面处理"); db.StringSet("板厚", 1.0, TimeSpan.FromSeconds(60)); //设置60秒过期 //单值递增或递减 var intA = db.StringIncrement("Increment", 2);//Redis值 递增2 var intB = db.StringDecrement("Decrement", 1);//Redis值 递减1 //存取对象 mktxhglb model1 = new mktxhglb() { pdctno = "at00101ca0", LayerNum = 10, BoardThick = 1.0, SurfaceType = "沉金" }; string modelJson1 = JsonConvert.SerializeObject(model1); db.StringSet("mktxhglb", modelJson1); string modelJson2 = db.StringGet("mktxhglb"); mktxhglb model2 = JsonConvert.DeserializeObject(modelJson2); //存取List db.ListRightPush("list", 1); //尾 追加值 db.ListRightPush("list", 2); //尾 追加值 db.ListLeftPush("list", 10); //顶 追加值 db.ListLeftPush("list", 20); //顶 追加值 var list = db.ListRange("list"); //获取list列表 20,10,1,2 var rightPop = db.ListRightPop("list");//尾 取出值 2 var leftpop = db.ListLeftPop("list"); //顶 取出值 20 //哈希(Redis本身是key/value,相当于Value中再嵌入一层key/value) db.HashSet("产品信息", "板长", 200); db.HashSet("产品信息", "板宽", 150); db.HashSet("产品信息", "板厚", 1.0); db.HashSet("产品信息", "表面处理", "沉锡"); var HashList = db.HashGetAll("产品信息");//获取所有Hash foreach (var item in HashList) { Console.WriteLine($"产品信息 {item.Name} { item.Value}"); } var BoardLenght = db.HashGet("产品信息", "板长"); //消息发布与订阅 和MQ消息队列功能 ISubscriber Subscriber = _conn.GetSubscriber(); //订阅消息 pcbren.Channel通道 Subscriber.Subscribe("pcbren.Channel", new Action ((channel, msg) => { Console.WriteLine($"收到消息:" + msg); })); //发送消息 pcbren.Channel通道 Subscriber.Publish("pcbren.Channel", $"发送信息 { DateTime.Now}"); //取消订阅 Subscriber.Unsubscribe("pcbren.Channel"); //批量操作 var bat = db.CreateBatch(); //批量写 Task t1 = bat.StringSetAsync("孔铜", 25); Task t2 = bat.StringSetAsync("面铜", 63); bat.Execute(); Task.WaitAll(t1, t2); //批量读 List > valueList = new List >(); valueList.Add(bat.StringGetAsync("孔铜")); valueList.Add(bat.StringGetAsync("面铜")); bat.Execute(); } } public class mktxhglb { /// /// 生产型号 /// public string pdctno { get; set; } ////// 层数 /// public int LayerNum { get; set; } ////// 板厚 /// public double BoardThick { get; set; } ////// 表面处理类型 /// public string SurfaceType { get; set; } }}
3.StackExchange.Redis Demo (C#)
地址
提取码 jsue
redis.windows.conf 配置文件参数说明
daemonize:如需要在后台运行,把该项的值改为yes
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
port:监听端口,默认为6379
timeout:设置客户端连接时的超时时间,单位为秒
loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
database:设置数据库的个数,默认使用的数据库是0
save:设置redis进行数据库镜像的频率
rdbcompression:在进行镜像备份时,是否进行压缩
dbfilename:镜像备份文件的文件名
dir:数据库镜像备份的文件放置的路径
slaveof:设置该数据库为其他数据库的从数据库
masterauth:当主数据库连接需要密码验证时,在这里设定
requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
maxclients:限制同时连接的客户端数量
maxmemory:设置redis能够使用的最大内存
appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
appendfsync:设置appendonly.aof文件进行同步的频率
vm_enabled:是否开启虚拟内存支持
vm_swap_file:设置虚拟内存的交换文件的路径
vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
vm_page_size:设置虚拟内存页的大小
vm_pages:设置交换文件的总的page数量
vm_max_thrrads:设置vm IO同时使用的线程数量
1、连接操作相关的命令
- quit:关闭连接(connection)
- auth:简单密码认证
2、对value操作的命令
- exists(key):确认一个key是否存在
- del(key):删除一个key
- type(key):返回值的类型
- keys(pattern):返回满足给定pattern的所有key
- randomkey:随机返回key空间的一个key
- rename(oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key
- dbsize:返回当前数据库中key的数目
- expire:设定一个key的活动时间(s)
- ttl:获得一个key的活动时间
- select(index):按索引查询
- move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库
- flushdb:删除当前选择数据库中的所有key
- flushall:删除所有数据库中的所有key
3、对String操作的命令
- set(key, value):给数据库中名称为key的string赋予值value
- get(key):返回数据库中名称为key的string的value
- getset(key, value):给名称为key的string赋予上一次的value
- mget(key1, key2,…, key N):返回库中多个string(它们的名称为key1,key2…)的value
- setnx(key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value
- setex(key, time, value):向库中添加string(名称为key,值为value)同时,设定过期时间time
- mset(key1, value1, key2, value2,…key N, value N):同时给多个string赋值,名称为key i的string赋值value i
- msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i
- incr(key):名称为key的string增1操作
- incrby(key, integer):名称为key的string增加integer
- decr(key):名称为key的string减1操作
- decrby(key, integer):名称为key的string减少integer
- append(key, value):名称为key的string的值附加value
- substr(key, start, end):返回名称为key的string的value的子串
4、对List操作的命令
- rpush(key, value):在名称为key的list尾添加一个值为value的元素
- lpush(key, value):在名称为key的list头添加一个值为value的 元素
- llen(key):返回名称为key的list的长度
- lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)
- ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素
- lindex(key, index):返回名称为key的list中index位置的元素
- lset(key, index, value):给名称为key的list中index位置的元素赋值为value
- lrem(key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从 头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。 lpop(key):返回并删除名称为key的list中的首元素 rpop(key):返回并删除名称为key的list中的尾元素 blpop(key1, key2,… key N, timeout):lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对 keyi+1开始的list执行pop操作。
- brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
- rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
5、对Set操作的命令
- sadd(key, member):向名称为key的set中添加元素member
- srem(key, member) :删除名称为key的set中的元素member
- spop(key) :随机返回并删除名称为key的set中一个元素
- smove(srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合
- scard(key) :返回名称为key的set的基数
- sismember(key, member) :测试member是否是名称为key的set的元素
- sinter(key1, key2,…key N) :求交集
- sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合
- sunion(key1, key2,…key N) :求并集
- sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合
- sdiff(key1, key2,…key N) :求差集
- sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合
- smembers(key) :返回名称为key的set的所有元素
- srandmember(key) :随机返回名称为key的set的一个元素
6、对zset(sorted set)操作的命令
- zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
- zrem(key, member) :删除名称为key的zset中的元素member
- zincrby(key, increment, member) :如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
- zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
- zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
- zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
- zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素
- zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素 zcard(key):返回名称为key的zset的基数 zscore(key, element):返回名称为key的zset中元素element的score zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素 zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素
- zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行 AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素 的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
7、对Hash操作的命令
- hset(key, field, value):向名称为key的hash中添加元素field<—>value
- hget(key, field):返回名称为key的hash中field对应的value
- hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value
- hmset(key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i
- hincrby(key, field, integer):将名称为key的hash中field的value增加integer
- hexists(key, field):名称为key的hash中是否存在键为field的域
- hdel(key, field):删除名称为key的hash中键为field的域
- hlen(key):返回名称为key的hash中元素个数
- hkeys(key):返回名称为key的hash中所有键
- hvals(key):返回名称为key的hash中所有键对应的value
- hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
8、持久化
- save:将数据同步保存到磁盘
- bgsave:将数据异步保存到磁盘
- lastsave:返回上次成功将数据保存到磁盘的Unix时戳
- shundown:将数据同步保存到磁盘,然后关闭服务
9、远程服务控制
- info:提供服务器的信息和统计
- monitor:实时转储收到的请求
- slaveof:改变复制策略设置
- config:在运行时配置Redis服务器