基础拾遗------redis详解
基础拾遗
前言
这篇文章和以往的基础拾遗有所不同,以前的介绍的都是c#基础,今天介绍的是redis。因为项目中一只在使用,我想现在大部分项目中都会用到nosql,缓存,今天就介绍一下redis.。废话少说下面开始正题。
1.redis是什么?
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
对的redis就是一个存键值对的数据库,它不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。【我习惯于存简单的key-value(value都是写成需要数据结构的对象)】。
2.redis使用场景
1.取最新N个数据的操作
2.排行榜应用,取TOP N 操作
3.需要精确设定过期时间的应用
4.计数器应用
由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的 效果,假如,在某种场景下有3个
客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站 都利用redis的这个特性来实现业务上的统计计数需求。
5.Uniq操作,获取某段时间所有数据排重值
6.实时系统,反垃圾系统
7.Pub/Sub构建实时消息系统
8.构建队列系统
9.缓存
最多的是用做缓存。他的操作所读是mysql的10倍不止。SET操作每秒钟 110000 次,GET操作每秒钟 81000 次。
3.redis数据结构
上边已经说了redis是一种高级的key:value存储系统,其中value支持五种数据类型:
1.字符串(strings)
2.字符串列表(lists)
3.字符串集合(sets)
4.有序字符串集合(sorted sets)
5.哈希(hashes)
3.1.key
1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key最好使用统一的命名模式,例如power_loginname
3.2.字符串(strings)
strings类型是一个很基础的数据类型,也是任何存储系统都必备的数据类型.
操作如下:
set myredis 'kmonkeywyl' get myredis
注:在遇到非字符串类型比如int,redis会默认转为string.
3.3.字符串列表(lists)
redis中的lists在底层实现上并不是数组,而是链表.所以插入数据快,但定位性能操作较差。
lists的常用操作包括lpush、rpush、lpush,lrange等
操作如下:
//新建一个list叫做mylist,并在列表头部插入元素"1" lpush mylist " //在mylist右侧插入元素"2" rpush mylist " //在mylist左侧插入元素"0" lpush mylist " //列出mylist中从编号0到编号1的元素 lrange mylist //列出mylist中从编号0到倒数第一个元素 lrange mylist -
注:上边应用场景1,2,8都用到lists就会很方便,具体应用场景(消息队列,分页,博客评论)
3.3.字符串集合(sets)
集合对于我们来说应该不陌生,就是我们初中学的那个集合,针对于集合有几个概念不知道你还熟悉不?取交集、取并集、取差,不熟悉的自己去熟悉去吧。
操作如下:
//向集合myset中加入新元素"wyl" sadd myset "wyl" (integer) sadd myset "kmonkey" (integer) //列出集合myset中的所有元素 smembers myset ) "wyl" ) "kmonkey" //判断元素1是否在集合myset中,返回1表示存在 sismember myset "wyl" (integer) //判断元素是否在集合myset中,返回0表示不存在 sismember myset "wangyanling" (integer) //新建一个新的集合yourset sadd yourset " (integer) sadd yourset " (integer) smembers yourset ) " ) " //对两个集合求并集 sunion myset yourset ) " ) "wyl" ) " ) "kmonkey"
3.4.有序字符串集合(sorted sets)
和上边的无须集合唯一的差别是有序的每个元素都有一个序号score,主要是便于排序
操作如下:
zadd myzset baidu.com (integer) //向myzset中新增一个元素360.com,赋予它的序号是3 zadd myzset .com (integer) //向myzset中新增一个元素google.com,赋予它的序号是2 zadd myzset google.com (integer) //列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。 zrange myzset - with scores ) "baidu.com" ) " ) "google.com" ) " ) "360.com" ) " //只列出myzset的元素 zrange myzset - ) "baidu.com" ) "google.com" ) "360.com"
3.5.哈希(hashes)
这就和结构数据库类似了。我是不喜欢在redis中使用hashes的。
操作如下
//建立哈希,并赋值 HMSET user: username wylpassword age OK //列出哈希的内容 > HGETALL user: ) "username" ) "wyl" ) "password" ) " ) "age" ) " //更改哈希中的某一个值 HSET user: password (integer) //再次列出哈希的内容 > HGETALL user: ) "username" ) "wyl" ) "password" ) " ) "age" ) "
4.redis常用指令
4.1.键值相关命令
keys * 取出当前所有的key
exists key查看key是否存在
del key删除key
expire key 设置key过期
ttl key获取key的有效时长
select 0 选择到0数据库 redis默认的数据库是0~15一共16个数据库
move key1 将当前数据库中的key移动到其他的数据库中
persist key 移除key的过期时间
random key 随机返回数据库里面的一个key
rename key2 key3 重命名key2 为key3
type key2 返回key的数据类型
4.2.服务器相关命令
ping PONG返回响应是否连接成功
echo 在命令行打印一些内容
select 0~15 编号的数据库
quit /exit 退出客户端
dbsize 返回当前数据库中所有key的数量
info 返回redis的相关信息
config get dir/* 实时传储收到的请求
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的数据库
4.3.字符串类型的操作
set key value 存在就修改,不存在就创建
get key 取值
mset key1 value1 key2 value2 一次设置多个值
mget key1 key2 :一次获取多个值
简单就这些大家可进一步去网上搜,因为太多我就部在这写了。
5.c#实例
(1)首先是redis连接服务基类。
public abstract class BaseRedis
{
private IRedisClient _client;
private string _configuration_string;
public BaseRedis()
{
}
public BaseRedis(string configuration_string)
{
this._configuration_string = configuration_string;
}
public void set_configuration_string(string configuration_string)
{
this._configuration_string = configuration_string;
}
public IRedisClient rs
{
get
{
if (string.IsNullOrWhiteSpace(this._configuration_string))
{
return null;
}
if (this._client == null)
{
this._client = new RedisClient(this._configuration_string);
}
return this._client;
}
}
}
(2)配置文件
其中路径可以直接写服务器ip地址。我把他写成字符串,是为了开发环境和正是环境都不用修改程序,直接做ip映射就行了。
(3)连接redis服务器
public class DbPerfmon : RedisHelper
{
public DbPerfmon()
: base()
{
string myredis = ConfigurationManager.AppSettings["Redis_Server_Url_Perfmon"].ToString();
set_configuration_string(myredis);
}
(4)简单操作
lock (sessionLocker)
{
if (string.IsNullOrEmpty(synKey) || user == null)
return string.Empty;
SessionObject so = null;
using (rs)
{
//获取redis值
so = rs.Get<SessionObject>(synKey);
if (so != null)
{
so.ResetLastTime();
if (!so.IsEffective())
{
so.SignType = signType;
so.User = user;
}
}
else
{
so = new SessionObject(user, signType, synKey);
}
}
DateTime dt = DateTime.Now.AddMinutes();
//添加redis
rs.Set<SessionObject>(synKey, so);
//设置有效时长
rs.ExpireEntryAt(synKey, dt);
return so.Id;
}
基础拾遗------redis详解的更多相关文章
- 基础拾遗------webservice详解
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
- 基础知识redis详解--【Foam番茄】
Redis 学习方式: 上手就用 基本的理论先学习,然后将知识融汇贯通 nosql讲解 为什么要用Nosql 现在都是大数据时代 大数据一般的数据库无法进行分析处理了 至少要会Springboot+S ...
- Redis详解入门篇
Redis详解入门篇 [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介 ...
- Redis详解入门篇(转载)
Redis详解入门篇(转载) [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 ...
- Redis详解(五)——主从复制
Redis详解(五)--主从复制 面临问题 机器故障.我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步的.而数据是最重要的,如果你不在乎,基本上也就不 ...
- Spring Boot 之 Redis详解
Redis是目前业界使用最广泛的内存数据存储. Redis支持丰富的数据结构,同时支持数据持久化. Redis还提供一些类数据库的特性,比如事务,HA,主从库. REmote DIctionary S ...
- Spring Data操作Redis详解
Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis ...
- .Net使用Redis详解之ServiceStack.Redis(七) 转载https://www.cnblogs.com/knowledgesea/p/5032101.html
.Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现 ...
- Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)
Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑配置文件(pml.xml)(我 ...
随机推荐
- 如何选择靠谱的app外包公司,2017最新资讯
企业在外包开发app之前最纠结的问题就是如何选择一个靠谱的app外包公司.因为一个靠谱的app外包公司非常重要,完全决定了app外包开发的周期.bug.售后服务等各方面问题,可以说app开发外包团队一 ...
- Atitit 会话层和表示层的异同
Atitit 会话层和表示层的异同 会话层 这一层也称为会晤层或对话层.在会话层及以上的更高层次中,数据传送的单位没有另外再取名字,一般都可称为报文. 会话层虽然不参与具体的数据传输,但它却对数据传输 ...
- kqueue例子
网络服务器通常都使用epoll进行异步IO处理,而开发者通常使用mac,为了方便开发,我把自己的handy库移植到了mac平台上.移植过程中,网上居然没有搜到kqueue的使用例子,让我惊讶不已.为了 ...
- 百度地图API的使用
------------------自说自话----------------------------- 好奇怪,习惯性使用有道云笔记记录心得与知识后就很少用博客园来记录了. 但是后来想想,有些东西还是 ...
- Javascript之自定义事件
Javascript自定义事件,其本质就是观察者模式(又称订阅/发布模式),它的好处就是将绑定事件和触发事件相互隔离开,并且可以动态的添加.删除事件. 下面通过实例,一步一步构建一个具体的Javasc ...
- c 网络与套接字socket
我们已经知道如何使用I/O与文件通信,还知道了如何让同一计算机上的两个进程进行通信,这篇文章将创建具有服务器和客户端功能的程序 互联网中大部分的底层网络代码都是用C语言写的. 网络程序通常有两部分组成 ...
- Notepad2替代系统自带的记事本
事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢:但今天复制的内容中有很多数字和一些我不想要的内 ...
- 微信小程序(微信应用号)开发ide安装解决方法
这两天整个技术圈都炸锅了,微信小程序(微信应用号)发布内测,首批200家收到邀请,但是没受邀请的同学,也不用担心,下面介绍一下解决方法. 首先需要下载ide,昨天只需要下载0.9版本的编辑器并替换文件 ...
- dicom网络通讯入门(2)
第二篇,前面都是闲扯 其实正文现在才开始,这次是把压箱底的东西都拿出来了. 首先我们今天要干的事是实现一个echo响应测试工具 也就是echo 的scu,不是实现打印作业管理么.同学我告诉你还早着呢. ...
- 『.NET Core CLI工具文档』(十一)dotnet-test
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-test 翻译:dotnet-test 名称 dotnet-test - 使用配置的测试运行器运行单元测试 ...